Подтвердить что ты не робот

Не удается разрешить символ "AndroidJUnit4"

Очевидно, для решения этой проблемы мне нужен правильный импорт. Согласно docs для 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 следующее:

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
4b9b3361

Ответ 1

Обновление

Android Test Library теперь является частью 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 была новой, а номера версий здесь сильно устарели.

Ответ 2

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

enter image description here

Ответ 3

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

Ответ 4

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

Если мы собираемся написать код кода для 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)

Ответ 5

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

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

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

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

Project structure

Ответ 6

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

android {
    ...
    testBuildType "release" 
}

Ответ 7

Если у кого-то все еще есть эта проблема:

Не удается разрешить символ "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'

Ответ 8

Обратите внимание, что этот OP сейчас в 2019 году, 4 года, поэтому, если вы используете Android X, то AndroidJUnit4.class устарела, у вас есть ошибка и еще одна с этим androidx.test.ext.junit.runners.AndroidJUnit4. Я предлагаю прочитать эту ссылку, чтобы решить проблему.

AndroidJUnit4.class устарел: как использовать androidx.test.ext.junit.runners.AndroidJUnit4?

Миграция тестов Junit4 на androidx. Причины, по которым не удалось загрузить программу-участник делегата & # 39 ;? Для меня Android Studio предложили заменить

@RunWith(AndroidJUnit4.class)

который устарел как

@RunWith(AndroidJUnit4ClassRunner.class)

и это

androidx.test.ext.junit.runners.AndroidJUnit4

с этим

import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner;

После этого ошибка исчезла, но я не знаю, нормально ли будет проходить будущий тест?!

Ответ 9

поместите этот код в свои Зависимости

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'
})

Ответ 10

Если вы используете проект с несколькими типами сборки, то выбранный тип сборки в окне варианта сборки должен быть указан с тегом testBuildType в файле build.gradle модуля.

Например: если вы используете тип сборки debug, то вам нужно добавить android{testBuildType "debug" }, если вы используете stage, то добавить оператор android{testBuildType "stage"} в тег android.

Ответ 11

Переместите тестовый класс в src/androidTest/java/. Тогда зависимость разрешится.

Ответ 12

Добавление

compile com.android.support.test:runner:0.5'

решил именно эту проблему для меня.

Ответ 13

Как показывает список ответов, это может быть вызвано несколькими причинами. Еще один для списка:

Я запустил чрезмерный LINT, который удалил весь неиспользованный импорт. Это приведет к тем же ошибкам, и легко не заметить, что это проблема.

Android-студия выделит ссылки, отсутствующие в тестовом коде - и появится всплывающее окно 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) в начале моего тестового класса.

Ответ 14

Классическая Invalidate Caches/Restart помогла мне! :)

Ответ 15

Добавьте эту зависимость в ваш файл build.gradle:

androidTestImplementation 'androidx.test.ext:junit:1.1.1'

Обновите конечную версию (1.1.1) последней выпущенной версией.