Вот часть моего build.gradle
которая имеет конфликт:
... dependencies { classpath 'com.android.tools.build:gradle:1.1.1' } ... testCompile( 'com.squareup.assertj:assertj-android:1.0.0' ) ...
Проблема, которую я вижу в журнале:
WARNING: Conflict with dependency 'com.android.support:support-annotations'. Resolved versions for app (21.0.3) and test app (20.0.0) differ.
По-видимому, он удаляет конфликтующую зависимость из пути к классам. Я не уверен, что это gradle
или android gradle
.
Я пробовал следующее:
testCompile( 'com.squareup.assertj:assertj-android:1.0.0' ) { exclude group: 'com.android.support', module: 'support-annotations' }
Но у меня все еще есть ошибки компиляции, поэтому зависимость исключена.
Я пробовал следующее:
configurations.all { resolutionStrategy { // fail eagerly on version conflict (includes transitive dependencies) // eg multiple different versions of the same dependency (group and name are equal) failOnVersionConflict() // force certain versions of dependencies (including transitive) // *append new forced modules: force 'com.android.support:support-annotations:21.0.3' // *replace existing forced modules with new ones: forcedModules = ['com.android.support:support-annotations:21.0.3'] } }
Но похоже, что он не работает, поскольку он не терпит неудачу в первом конфликте, и у меня все еще есть ошибки компиляции.
Каковы будут ваши предложения?
UPDATE Что я хочу сказать, удалив зависимость – я вижу много ошибок компиляции, которые assertj
не найдены
Я столкнулся с тем же вопросом. Это исправило это для меня:
testCompile('com.squareup.assertj:assertj-android:1.0.0'){ exclude group: 'com.android.support', module:'support-annotations' }
ОК. Проблема, что android-assertj
является android-assertj
библиотекой. Поэтому нам нужно добавить дополнительные усилия, чтобы гарантировать, что aar распакован для build\intermediates
.
Я уверен, что эта функциональность была включена в robolectric-gradle
. Но пока это не работает.
Чтобы исправить проблему, я загрузил android-assertj
и разархивировал ее. Я переименовал classes.jar
в android-assertj.jar
(приветствую старые времена) и перешел в папку lib .
И я заменил зависимость android-asserj
следующей в моей градиенте:
testCompile files( 'lib/android-assertj.jar' ) testCompile 'org.assertj:assertj-core:1.6.0'
Таким образом, тесты компилируются и могут запускаться. Но неудача.
Чтобы исправить это, я также добавил местоположение файла манифеста в config:
@Config( emulateSdk = 18, reportSdk = 18, manifest = "src/main/AndroidManifest.xml" )
После этого тесты работают с консоли, но не с AS. Мне нужно танцевать сейчас с ресурсами AppCompat
🙂
Счастливое тестирование!
UPD: Это обходное решение не требуется с последним плагином для Android
Принятый ответ не сработал для меня. Однако, добавив следующее, работа была для меня:
androidTestCompile 'com.android.support:support-annotations:23.0.1'
а также:
testCompile 'com.android.support:support-annotations:23.0.1'
Вам нужно изменить:
testCompile( 'com.squareup.assertj:assertj-android:1.0.0' ) { exclude group: 'com.android.support', module: 'support-annotations' }
чтобы:
compile('com.squareup.assertj:assertj-android:1.0.0') { exclude group: 'com.android.support', module: 'support-annotations' }
Также убедитесь, что тестовая папка называется test
а не androidTest