Очевидно, мне нужен правильный статус импорта для решения этой проблемы. Согласно документацииAndroidJUnit4
, это должно быть
import android.support.test.runner.AndroidJUnit4;
Когда я это делаю, Android Studio выделяется runner
красным цветом и жалуется: «Не удается разрешить символ« бегун »».
Задний план
Я дошел до этого, следуя руководствам на сайте разработчиков Android по настройке тестов с помощью UI Automator . Первая проблема , которую я столкнулся в том , что com.android.support:support-v4:22.2.0
и com.android.support.test:runner:0.2
зависят от разных версий com.android.support:support-annotations
. Я последовал предложениям из этого отчета об ошибке Android и добавил allprojects
в свой проект следующее build.gradle
:
configurations.all {
resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}
Это решило непосредственную ошибку, но я подозреваю, что это привело к моим текущим проблемам. Есть ли у кого-нибудь предложения, как это исправить?
Повторные разделы из `./gradlew: app: dependencies
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
com.android.support.test:runner
полностью отсутствует . Можете ли вы подтвердить,gradle dependencies
что вы все еще используете это послеresolutionStrategy
изменения?(*)
значит послеcom.android.support.test:runner:0.2
.Ответы:
Убедитесь, что ваше приложение находится в варианте отладки. Перейдите в Build> Select Build Variant ... и должно появиться следующее:
источник
android { testBuildType "staging"}
debug
, не работают, если явно не установлено значение «отладка»Я сделал ошибку, поместив тестовые классы в src / test . После их перемещения в src / androidTest / java / зависимость была устранена.
источник
Итак, вот ваша и моя ошибка!
Если мы собираемся написать кусок кода для локального модульного тестирования, мы не должны использовать его,
@RunWith(AndroidJUnit4.class)
потому что мы не используем AndroidJUnit4, но нам нужен Junit4. так что мы должны написать@RunWith(JUnit4.class)
. И, конечно же, ваш тестовый файл java находится вapp/src/test/java/your.package.name
каталоге.В противном случае, если (!!) мы хотим написать какой-нибудь инструментальный модульный тест Android, мы должны поместить наши тестовые java-файлы в
app/src/androidTest/java/your.package.name
каталог и использовать аннотацию, например@RunWith(AndroidJUnit4.class)
источник
Обновить
Библиотека тестов Android теперь является частью AndroidX. Обязательно используйте правильные зависимости Gradle, найденные в официальной документации .
Оригинальный ответ
Я нашел здесь , что есть более новые версии библиотеки поддержки тестирования , чем то , что я использовал:
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' }
Примечание. Обязательно используйте самые последние версии этих библиотек. Этот вопрос возник в то время, когда библиотека поддержки тестов Android была новой, а номера версий здесь очень устарели.
источник
dependencies { androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test:rules:1.1.1' androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0' }
androidx
пространства имен. Спасибо за обновления.Я решил проблему, внеся небольшое изменение в файл build.gradle приложения. В
dependencies { ... }
разделе обязательно укажите следующую строку:debugImplementation 'com.android.support.test:runner:1.0.1'
или любая другая версия является самой новой на тот момент (
...Compile
устарела и была заменена на...Implementation
). Обратите внимание на использованиеdebugImplementation
. Android Studio предложила автоматическое включениеandroidTestImplementation
, что не сработало.Я узнал, как изменить его с теста на отладку, посмотрев в структуре проекта в разделе «Зависимости» модуля приложения, где вы можете изменить объем каждой зависимости, см. Ниже.
источник
Обратите внимание, что этот OP сейчас в 2019 году, ему 4 года, поэтому, если вы используете Android X, он
AndroidJUnit4.class
устарел, у вас есть ошибка и еще одна ошибкаandroidx.test.ext.junit.runners.AndroidJUnit4
. Предлагаю прочитать эти ссылки, чтобы решить проблему.AndroidJUnit4.class устарел: как использовать androidx.test.ext.junit.runners.AndroidJUnit4?
Перенос тестов Junit4 на androidx: почему не удалось загрузить бегун делегата? Мне Android Studio предложила заменить
@RunWith(AndroidJUnit4.class)
который устарел с
@RunWith(AndroidJUnit4ClassRunner.class)
и это
androidx.test.ext.junit.runners.AndroidJUnit4
с этим
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner;
После этого ошибка исчезла, но я не знаю, нормально ли будет работать будущий тест ?!
источник
В моем случае это помогло для варианта выпуска:
android { ... testBuildType "release" }
источник
Распространенной причиной этой проблемы является то, что при добавлении зависимости ниже:
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
Это правильная зависимость, если вы собираетесь использовать инструментальные тесты (тесты в
androidTest
пакете java).Но для реализации локальных модульных тестов (тестов в
test
пакете java) при использовании вышеупомянутой зависимости; тогда ты столкнешьсяCannot resolve symbol 'AndroidJUnit4'
Это связано с тем, что
androidTestImplementation
директива используется для импорта библиотек в инструментальных тестах, но не в локальных JVM / модульных тестах.Если вы хотите использовать
AndroidJUnit4
в локальном JVM / модульном тесте, используйте вместо этого зависимость нижеtestImplementation 'androidx.test.ext:junit:1.1.1'
То же самое применимо, если вы добавите последнюю зависимость при использовании
AndroidJUnit4
в инструментальном тесте, вы также получитеCannot resolve symbol 'AndroidJUnit4'
; потому что вы используете неправильную директиву.источник
Если у кого-то все еще есть эта проблема:
и используя API 27,
build.gradle
который находится в модуле приложения, добавьте следующие строки:testImplementation 'junit:junit:4.12' // AndroidJUnitRunner and JUnit Rules androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test:rules:1.0.2' // Espresso dependencies androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.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' })
источник
Переместите тестовый класс в src / androidTest / java /. Тогда зависимость исчезнет.
источник
Если вы используете проект с несколькими типами сборки, то выбранный тип сборки в окне вариантов сборки необходимо указать с помощью тега testBuildType в файле build.gradle модуля.
Например: если вы используете отладку типа сборки, вам следует добавить
android{testBuildType "debug" }
, если вы используете этап, добавьтеandroid{testBuildType "stage"}
оператор в тег Android.источник
Классический Invalidate Cache / Restart мне помог! :)
источник
Добавьте эту зависимость в свой файл build.gradle:
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
Обновите конечную версию (
1.1.1
) до последней выпущенной версии.источник
Добавление
compile com.android.support.test:runner:0.5'
решил эту проблему для меня.
источник
compile
Директивы именуют зависимости, используемые в основном приложении, аandroidTestComiple
имена зависимостей, используемые для тестирования. Так что правильный ответ - использоватьandroidTestCompile
, а неcompile
.Как видно из списка ответов, это может быть вызвано несколькими причинами. Еще одно для списка:
Я слишком усердно запустил LINT, который удалил весь неиспользуемый импорт. Это приведет к тем же ошибкам, и легко не заметить, что это проблема.
Android-studio выделит ссылки, которые отсутствуют в тестовом коде - и появится всплывающее окно ALT-ENTER (это то, что легко пропустить).
Затем мне нужно удалить тесты из LINT - или хотя бы отключить это предупреждение.
Изменить: @ Code-Apprentice, отсутствующие строки:
import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertNull; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue;
Итак, первая ошибка в файле была
@RunWith(AndroidJUnit4.class)
в начале моего тестового класса.источник
Краткая версия рассказа:
Я отвечаю на этот вопрос от 15 февраля 2020 г. К сожалению, я исчерпал все возможные решения, упомянутые здесь и в других местах.
https://github.com/codepath/android_guides/wiki/UI-Testing-with-Espresso
https://github.com/udacity/AdvancedAndroid_TeaTime/issues/14
Android Espresso: не удается разрешить символ AndroidJUnit4.class
Не удается разрешить символ AndroidJUnit4
Android Espresso: не удается разрешить символ AndroidJUnit4.class
Да, ни один из вышеперечисленных не работает. Я использую встроенную функцию «Migrate to Andoridx», она может напоминать мне, что мне нужно обновить свои целевые версии SDK и версию Gradle. После того, как я обновил свою версию gradle с 2.0.2 до 3.5.3. Они просто работают, даже старый оператор импорта работает.
источник
Та же ошибка возникла у меня, когда я следил за приложением Google IOSched и настраивал свой проект с тремя типами сборки [отладка, выпуск, постановка], где отладка и выпуск используют один и тот же исходный каталог.
sourceSets { debug.java.srcDir 'src/debugRelease/java' release.java.srcDir 'src/debugRelease/java' }
В этом случае укажите
testBuildType
в файле build.gradle на уровне модуля, и теперь проект должен иметь возможность разрешать символ «AndroidJUnit4».... sourceSets { debug.java.srcDir 'src/debugRelease/java' release.java.srcDir 'src/debugRelease/java' } testBuildType "staging" ...
Ссылка: https://github.com/google/iosched/blob/master/mobile/build.gradle
источник
Убедитесь, что у вас есть
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
зависимости в файле build.gradle вашего приложения. По ошибке удалил и тест перестал работать.
источник