Не удалось разрешить средство запуска тестов Android JUnit

Я пытаюсь добавить инструментальный тест в наш проект, но кажется, что Gradle неправильно добавляет Android JUnit Test Runner в путь к классам проекта. Тестовые зависимости моего файла сборки gradle выглядят так:

testCompile 'junit:junit:4.12'
androidTestCompile 'junit:junit:4.12'

androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'

Мы используем последнюю версию библиотеки поддержки (24.0.0), но текущая версия средства запуска тестов (JUnit runner) и Espresso используют версию 23.1.0. Чтобы разрешить конфликт версий, я заставляю бегун (и эспрессо) использовать более новую версию (я понимаю последствия, но мы не можем использовать старую версию):

androidTestCompile 'com.android.support:support-v4:24.0.0'
androidTestCompile 'com.android.support:appcompat-v7:24.0.0'
androidTestCompile 'com.android.support:support-v13:24.0.0'
androidTestCompile 'com.android.support:recyclerview-v7:24.0.0'
androidTestCompile 'com.android.support:design:24.0.0'
androidTestCompile 'com.android.support:support-annotations:24.0.0'

а также:

configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-annotations:24.0.0'
    }
}

Однако по какой-то причине Gradle не добавляет пакет runner (в android.support.test). Так

import android.support.test.runner.AndroidJUnit4;

выдает ошибку: cannot resolve symbol 'runner'. Очистили кеш Android Studio, перезапустили IDE, очистили кеш Gradle (как проектный, так и глобальный), все безуспешно. Кто-нибудь знает, что происходит?


person Javad    schedule 29.06.2016    source источник
comment
Это связано с тем, что аннотации поддержки внесли обратно несовместимые изменения (например, удаление некоторых API), а средство запуска тестов не работает (не может работать с более новой версией библиотеки), потому что оно использует более старые (вероятно, удаленные) API?   -  person Javad    schedule 29.06.2016
comment
Похоже, что проблема не в версии. Я по-прежнему получаю ту же ошибку, даже если использую более старую версию (используемую тестировщиком). Есть идеи, почему?   -  person Javad    schedule 29.06.2016
comment
Такая же проблема после обновления Android Studio с 2.2.6 до 2.2.7.   -  person Ernest    schedule 02.08.2016
comment
Понизил версию Android Studio до 2.2.6 и повторно импортировал проект (синхронизация может не помочь), и JUnit снова разрешился. Похоже, что ошибка в AS 2.2.7.   -  person Ernest    schedule 02.08.2016


Ответы (2)


попробуйте добавить: androidTestCompile 'com.android.support.test:rules:0.5'

person AAC    schedule 07.07.2016

Это мой старый вопрос, но я подумал, что это может помочь объяснить проблему и решение. Проблема заключалась в названии варианта отладочной сборки: если вы назовете свой вариант отладочной сборки чем-либо, кроме debug, обязательно уведомите плагин Android Gradle, добавив testBuildType "yourDebugBuildVariantName" в свой build.gradle скрипт (build.gradle вашего модуля приложения, а не глобальный проект) в android{} раздел или переименуйте вариант отладочной сборки просто в debug. Если у вас есть несколько вариантов отладочной сборки, вам нужно указать один из них, на котором вы хотите запустить свои тесты, например: testBuildType armDebug:

apply plugin: 'com.android.application'
...

android {

  testBuildType "myDebug" <-

  compileOptions { ... }

  sourceSets { ... }

  signingConfigs { ... }
}

Даже с такой явной конфигурацией у Gradle иногда возникают проблемы с запуском инструментальных тестов. Лучший способ обойти это — переименовать вариант отладочной сборки (тот, на котором вы запускаете тесты) в debug, если это вам подходит.

person Javad    schedule 18.02.2017