69

Очевидно, что для решения этой проблемы требуется правильный импорт. Согласно docs for AndroidJUnit4, это должно бытьНе удается разрешить символ 'AndroidJUnit4'

import android.support.test.runner.AndroidJUnit4; 

Когда я делаю это, Android Студия подчеркивает runner в красный и жалуется на «не удается разрешить символ" бегун».

фон

я попал в этот момент, следуя учебники на сайте Android Developer для setting up tests using UI Automator. Первая проблема, с которой я столкнулся, заключалась в том, что com.android.support:support-v4:22.2.0 и com.android.support.test:runner:0.2 зависят от разных версий com.android.support:support-annotations. Я следовал предложения от this Android bug report и добавил следующее allprojects в моем проекте-х build.gradle:

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

Это решало сразу же ошибку, но я подозреваю, что это приведет к моим текущим проблемам. Есть ли у кого-нибудь какие-либо предложения о том, как это исправить?

Релевент секции из `./gradlew: приложение: зависимостей

androidTestCompile - Classpath for compiling the androidTest sources. 
+--- com.jayway.android.robotium:robotium-solo:5.2.1 
+--- com.squareup:fest-android:1.0.8 
| \--- org.easytesting:fest-assert-core:2.0M10 
|   \--- org.easytesting:fest-util:1.2.5 
+--- com.android.support.test:runner:0.2 
| +--- junit:junit-dep:4.10 
| | \--- org.hamcrest:hamcrest-core:1.1 
| +--- com.android.support.test:exposed-instrumentation-api-publish:0.2 
| \--- com.android.support:support-annotations:22.0.0 -> 22.2.0 
+--- com.android.support.test:rules:0.2 
| \--- com.android.support.test:runner:0.2 (*) 
\--- com.android.support.test.uiautomator:uiautomator-v18:2.1.0 

compile - Classpath for compiling the main sources. 
+--- com.android.support:appcompat-v7:22.2.0 
| \--- com.android.support:support-v4:22.2.0 
|   \--- com.android.support:support-annotations:22.2.0 
+--- com.android.support:support-v4:22.2.0 (*) 
+--- com.google.android.gms:play-services:6.1.71 
| \--- com.android.support:support-v4:20.0.0 -> 22.2.0 (*) 
+--- com.crashlytics.android:crashlytics:1.+ -> 1.1.13 
\--- com.jakewharton:butterknife:5.1.2 
+0

Это говорит о том, что ваша сборка отсутствует 'com.android.support.test: runner' наповал. Можете ли вы подтвердить с помощью «зависимостей градиента», что вы по-прежнему тянете это после изменения 'resolutionStrategy'? – CommonsWare

+0

@CommonsWare Добавлены зависимости зависимости от моего вопроса. Я не знаю, что означает '(*)' после 'com.android.support.test: runner: 0.2'. –

+0

Согласно [The Gradle folks] (https://discuss.gradle.org/t/what-is-the-asterisk-in-dependencyreport/6067/3), звездочка "означает, что древовидный вид графика зависимости в этой точке сокращается, потому что эта часть графика уже была указана ранее ». Я в тупике, почему это не работает для вас. – CommonsWare

ответ

14

я нашел here, что есть более новые версии библиотеки поддержки тестирования, чем то, что я использовал:

dependencies { 
    androidTestCompile 'com.android.support.test:runner:0.5' 
    androidTestCompile 'com.android.support.test:rules:0.5' 
    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2' 
} 
+2

теперь бегун обновлен до 0,4 – herbertD

+15

aaaand, все еще не работает – Karoly

65

Я допустил ошибку, чтобы поставить тестовые классы на src/test. После переноса их на src/androidTest/java/ зависимость была разрешена.

+0

В моем случае моя тестовая папка была src/test по какой-то причине, тогда мне пришлось переименовать ее в src/androidTest, и она решила мою проблему через 3 часа ... –

47

Итак, вот ваша ошибка и моя!

Если мы собираемся написать код кода для Local Unit Testing, мы не должны использовать @RunWith(AndroidJUnit4.class), потому что мы не используем AndroidJUnit4, но нам нужен Junit4. поэтому мы должны написать @RunWith(JUnit4.class). И, конечно, ваш тестовый файл java находится под каталогом app/src/test/java/your.package.name.

Иначе, если (!!) мы хотим, чтобы написать некоторые Android Instrumented Unit Test мы должны поставить наши Java-файлы тестов в app/src/androidTest/java/your.package.name каталоге и использовать аннотацию как @RunWith(AndroidJUnit4.class)

+0

Спасибо большое приятель, это сработало для меня – Zia

+0

Это работает, спасибо большое. –

+0

Я использую Maven, что тогда? – JohnyTex

106

Убедитесь, что ваше приложение в варианте отладки сборки. Перейти к Строить> Выберите Построить Variant ... и следующий должен показать:

enter image description here

+2

Спасибо, ты спас меня – Sofa

+2

Благослови тебя. В документации никогда не говорится, что «этот материал будет работать только при отладке». Настолько разочаровывающе. –

+10

Ничего себе. Up-Vote x 1 миллион. Это ответ, который я искал в течение нескольких дней. Также нашел это, чтобы вы могли изменить тип сборки для использования. 'android {testBuildType" staging "}' – WIllJBD

2

поместить этот код в своих подвластных

compile fileTree(dir: 'libs', include: ['*.jar']) 
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
    exclude group: 'com.android.support', module: 'support-annotations' 
}) 
+1

Когда я написал этот вопрос, я еще не добавил эспрессо в качестве зависимости для модульных тестов. –

+0

+1 Я действительно понял это до того, как увидел это, но да, это то, что я сделал, и это решило мою проблему. –

+2

Следуйте двум ответам ниже: @sepehr. Класс AndroidJunit4 не находится в пакете эспрессо, инсталлировал его в пакете android.support.test.runner. и все, что вам нужно сделать, это включить @Runwith (AndroidJunit4.class), пишите выше/для тестового примера, присутствующего в src/Androidtest/java, INSTED OF, в том числе в тестовых случаях, написанных под src/test/java. – Khay

1

У меня была такая же проблема, решить ее делая небольшое изменение в файле build.gradle приложения.В разделе dependencies { ... }, не забудьте включить следующую строку:

debugImplementation 'com.android.support.test:runner:1.0.1' 

или любой другой версии является новейшим в этой точке (...Compile устарела и была заменена ...Implementation). Примечание использование debugImplementation. Android Studio предложила автоматически включить его с помощью androidTestImplementation, который не работал.

Я узнал, как изменить его из теста для отладки в структуре проекта в разделе «Зависимости модуля приложения», там вы можете изменить область каждой зависимости, см. Ниже.

Project structure

0

В моем случае это помогло для варианта выпуска:

android { 
    ... 
    testBuildType "release" 
} 
+0

Можете ли вы дать более полное решение. Я не понимаю контекста того, что вы сделали. –

+0

Я столкнулся с проблемой «Не могу решить проблему с символом« AndroidJUnit4 »на моем эспрессо-тесте, когда я изменил вариант сборки на« release ». Как только я добавил этот оператор (testBuildType «release») в app-level build.gradle (взятый из https://developer.android.com/studio/test/index.html#add_a_new_test) , этот вопрос исчез. –

+0

Я отформатировал ваш ответ на код в вашем ответе.Вы должны добавить более подробную информацию, такую ​​как ссылка из вашего комментария, и описать, где этот блок входит в ваш проект. –

Смежные вопросы