В Kotlin модульном тесте, почему Android Studio показывает Mockito как неразрешенную ссылку ДАЖЕ, ЧТО оно компилируется и тесты проходят? - PullRequest
1 голос
/ 07 апреля 2020

Довольно странная проблема: Mackito deps выглядят сломанными, хотя они на самом деле работают.

Почему это происходит и как это исправить?

image

Во всплывающей подсказке об этих ошибках указано «неразрешенная ссылка».

Некоторые сведения :

  • Это юнит-тесты (под app/src/test), а не Android тестирование КИПиА.
  • Это происходит только тогда, когда тест Kotlin , В эквивалентном тесте Java в Mockito Studio все отлично отображается в Android Studio.
  • Повторяю, , хотя материал Mockito показан красным, он все равно работает : тест компилируется и передает, как в командной строке, так и в Android Studio.

В build.gradle, в dependencies:

testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.19.0'

// ... 

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50"

(Также у меня есть файл с именем org.mockito.plugins.MockMaker, содержащий mock-maker-inline, , так что Mockito работает с окончательными Kotlin классами .)

Редактировать: не должно быть релевантным, но для Android контрольно-измерительные приборы, есть и это. (У меня были некоторые проблемы с обновлением до Mockito 2 ранее, поэтому придерживался 1.10.19 там.)

// Here keeping older Mockito for now 
androidTestImplementation 'org.mockito:mockito-core:1.10.19'
// dexmaker needed for Mockito to work in androidTest
androidTestImplementation 'com.google.dexmaker:dexmaker:1.2'
androidTestImplementation 'com.google.dexmaker:dexmaker-mockito:1.2'

Использование Android Studio 3.5.3

То, что я пробовал

  • Повторная синхронизация c проекта (build.gradle)
  • Выполнение clean Задача Gradle внутри AS
  • Закройте проект и снова откройте его
  • Выйти Android Студия полностью и открыть ее снова

Обновление

Я думаю, это связано с несколькими версиями Mockito , присутствующими в проекте ,

Когда я нажимаю Cmd на имена, показанные красным, это приводит меня к источникам в mockito-core-1.9.5-sources.jar; но когда я нажимаю Cmd на ArgumentMatchers или MockitoJUnitRunner, это приводит меня к mockito-core-2.19.0-sources.jar, правильному.

image

Я исследовал с помощью app:dependencies, и единственная ссылка на Mockito 1.9.5 - через dexmaker-mockito.

+--- com.google.dexmaker:dexmaker-mockito:1.2
|    +--- com.google.dexmaker:dexmaker:1.2
|    \--- org.mockito:mockito-core:1.9.5 -> 1.10.19 (*)

Но поскольку зависимость от dexmaker распространяется только на androidTest, она не должна влиять на что-либо при test, верно ...? 1080

Редактировать: действительно, androidTest Депс каким-то образом запутал Android Studio; закомментирование всех депов mockito и dexmaker в androidTestImplementation убрало подсвеченные ошибочные ошибки (но, как уже упоминалось, другая версия использовалась по причине).

В итоге Android Обновление Studio исправило это .

1 Ответ

0 голосов
/ 07 апреля 2020

Ну да, это была ошибка в Android Studio: обновление до последней версии (3.6.2) исправило ее.

Зависимости androidTestImplementation конфликтовали с testImplementation; см обновленный вопрос для деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...