Oczywiście potrzebuję prawidłowej instrukcji importu, aby rozwiązać ten problem. Zgodnie z dokumentacjąAndroidJUnit4
, tak powinno być
import android.support.test.runner.AndroidJUnit4;
Kiedy to robię, Android Studio podświetla się runner
na czerwono i narzeka „Nie można rozwiązać problemu z symbolem„ biegacz ””.
tło
Dotarłem do tego punktu, postępując zgodnie z samouczkami w witrynie Android Developer, aby skonfigurować testy za pomocą UI Automator . Pierwszym problemem, który napotkałem, było to com.android.support:support-v4:22.2.0
i com.android.support.test:runner:0.2
zależało od różnych wersji com.android.support:support-annotations
. Postępowałem zgodnie z sugestiami z tego raportu o błędzie Androida i dodałem następujące elementy do allprojects
mojego projektu build.gradle
:
configurations.all {
resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}
To rozwiązało natychmiastowy błąd, ale podejrzewam, że doprowadziło to do moich obecnych problemów. Czy ktoś ma jakieś sugestie, jak to naprawić?
Odpowiednie sekcje z `./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
źródło
com.android.support.test:runner
. Czy możesz potwierdzićgradle dependencies
, że poresolutionStrategy
zmianie nadal to robisz ?(*)
oznacza późniejcom.android.support.test:runner:0.2
.Odpowiedzi:
Upewnij się, że Twoja aplikacja jest w wariancie kompilacji do debugowania. Idź do Build> Select Build Variant ... i powinno pojawić się:
źródło
android { testBuildType "staging"}
debug
, nie działają, chyba że są wyraźnie ustawione na „debugowanie”Popełniłem błąd, umieszczając klasy testowe w src / test . Po przeniesieniu ich do src / androidTest / java / zależność została rozwiązana.
źródło
Ok, więc oto twój błąd i mój!
Jeśli mamy zamiar napisać fragment kodu do lokalnego testowania jednostkowego, nie powinniśmy używać,
@RunWith(AndroidJUnit4.class)
ponieważ nie używamy AndroidJUnit4, ale potrzebujemy Junit4. więc powinniśmy napisać@RunWith(JUnit4.class)
. I oczywiście twój plik testowy java znajduje się wapp/src/test/java/your.package.name
katalogu.W przeciwnym razie, jeśli (!!) chcemy napisać jakiś testowy test jednostkowy dla Androida , powinniśmy umieścić nasze testowe pliki java w
app/src/androidTest/java/your.package.name
katalogu i użyć adnotacji typu@RunWith(AndroidJUnit4.class)
źródło
Aktualizacja
Biblioteka testów systemu Android jest teraz częścią AndroidX. Upewnij się, że używasz poprawnych zależności Gradle, które można znaleźć w oficjalnej dokumentacji .
Oryginalna odpowiedź
Odkryłem tutaj, że istnieją nowsze wersje biblioteki wsparcia testowania niż ta, której używałem:
Uwaga: pamiętaj, aby używać najnowszych wersji tych bibliotek. To pytanie pochodzi z czasów, gdy biblioteka obsługi testów Androida była nowa, a podane tutaj numery wersji są bardzo nieaktualne.
źródło
Rozwiązałem problem, wprowadzając niewielką zmianę w pliku build.gradle aplikacji. W
dependencies { ... }
sekcji upewnij się, że zawiera następujący wiersz:lub jakakolwiek wersja jest najnowsza w tym momencie (
...Compile
jest przestarzała i została zastąpiona przez...Implementation
). Zwróć uwagę na użyciedebugImplementation
. Android Studio zasugerował automatyczne dołączenie go zandroidTestImplementation
, co nie zadziałało.Dowiedziałem się, jak zmienić to z testu na debugowanie, zaglądając do struktury projektu pod Zależnościami modułu aplikacji, gdzie możesz zmienić zakres każdej zależności, patrz poniżej.
źródło
Zwróć uwagę, że ten OP ma teraz 4 lata, więc jeśli używasz Androida X,
AndroidJUnit4.class
jest on przestarzały, masz tam błąd i jeszcze jeden z tymandroidx.test.ext.junit.runners.AndroidJUnit4
. Proponuję przeczytać te linki, aby rozwiązać problem.AndroidJUnit4.class jest przestarzały: jak używać androidx.test.ext.junit.runners.AndroidJUnit4?
Migracja testów Junit4 do Androidx: co powoduje, że „delegat runner nie mógł zostać załadowany”? U mnie Android Studio zasugerował wymianę
który został wycofany z
i to
z tym
Po tym błąd zniknął, ale nie wiem, czy przyszły test po uruchomieniu jest OK ?!
źródło
W moim przypadku pomogło to w wydaniu wariantu:
źródło
Typową przyczyną tego problemu jest to, że podczas dodawania poniższej zależności:
Jest to poprawna zależność, jeśli zamierzasz używać testów instrumentalnych (testy w
androidTest
pakiecie java)Ale do implementacji lokalnych testów jednostkowych (testy w
test
pakiecie java) przy użyciu wyżej wymienionej zależności; wtedy staniesz twarzą w twarzCannot resolve symbol 'AndroidJUnit4'
Dzieje się tak, ponieważ
androidTestImplementation
dyrektywa jest używana do importowania bibliotek w testach instrumentalnych, ale nie w lokalnych testach JVM / jednostkowych.Jeśli chcesz użyć
AndroidJUnit4
w lokalnej JVM / teście jednostkowym, użyj zamiast tego poniższej zależnościTo samo dotyczy, jeśli dodasz tę drugą zależność podczas używania
AndroidJUnit4
w teście instrumentalnym, otrzymasz równieżCannot resolve symbol 'AndroidJUnit4'
; ponieważ używasz złej dyrektywy.źródło
Jeśli ktoś nadal ma ten problem:
i używając API 27, w
build.gradle
module znajdującym się w module app, dodaj następujące wiersze:źródło
umieść ten kod w swoich zależnościach
źródło
Jeśli używasz projektu z wieloma typami kompilacji, wybrany typ kompilacji w oknie wariantu kompilacji musi być wymieniony z tagiem testBuildType w pliku build.gradle modułu.
Na przykład: Jeśli używasz debugowania typu kompilacji , powinieneś dodać
android{testBuildType "debug" }
, jeśli używasz stage, dodajandroid{testBuildType "stage"}
instrukcję w tagu android.źródło
Przenieś klasę testową do src / androidTest / java /. Wtedy zależność się rozwiąże.
źródło
Klasyczna pamięć podręczna Invalidate / Restart pomogła mi! :)
źródło
Dodaj tę zależność w pliku build.gradle:
Zaktualizuj wersję końcową (
1.1.1
) o najnowszą wydaną wersję.źródło
Dodawanie
rozwiązałem dokładnie ten problem za mnie.
źródło
compile
dyrektywy zależności nazw używane w aplikacji głównej, podczas gdyandroidTestComiple
zależności nazw używane do testowania. Więc poprawną odpowiedzią jest użycieandroidTestCompile
, a niecompile
.Jak pokazuje lista odpowiedzi, może to być spowodowane kilkoma przyczynami. Jeszcze jedno na liście:
Prowadziłem nadgorliwy LINT, który usunął wszystkie niewykorzystane importy. Spowoduje to te same błędy i łatwo nie zauważyć, że na tym polega problem.
Android-studio podświetli odniesienia, których brakuje w kodzie testu - i pojawi się wyskakujące okienko ALT-ENTER (jest to bit, który łatwo przeoczyć).
Następnie muszę usunąć testy z LINT - lub przynajmniej wyłączyć to ostrzeżenie.
Edycja: @ Code-Apprentice, brakujące wiersze to:
Więc pierwszy błąd w pliku wystąpił
@RunWith(AndroidJUnit4.class)
na początku mojej klasy testowej.źródło
Wersja krótkiej historii:
Odpowiadam na ten post z 15 lutego 2020 roku. Niestety wyczerpałem wszystkie możliwe rozwiązania wymienione tutaj i nie tylko.
https://github.com/codepath/android_guides/wiki/UI-Testing-with-Espresso
https://github.com/udacity/AdvancedAndroid_TeaTime/issues/14
Android Espresso: nie można rozpoznać symbolu AndroidJUnit4.class
Nie można rozpoznać symbolu AndroidJUnit4
Android Espresso: nie można rozpoznać symbolu AndroidJUnit4.class
Tak, żaden z powyższych nie działa. Używam wbudowanej funkcji „Migrate to Andoridx”, może mi ona przypominać, że muszę zaktualizować docelowe wersje SDK i moją wersję Gradle. Po uaktualnieniu mojej wersji Gradle z 2.0.2 do 3.5.3. Po prostu działają, nawet stara instrukcja importu działa.
źródło
Ten sam błąd wystąpił, gdy śledzę aplikację Google IOSched i konfiguruję projekt z trzema typami kompilacji [debugowanie, wydanie, przemieszczanie], w których debugowanie i wydanie mają ten sam katalog źródłowy
W takim przypadku określ
testBuildType
plik build.gradle na poziomie modułu, a projekt powinien być teraz w stanie rozpoznać symbol „AndroidJUnit4”.Źródła: https://github.com/google/iosched/blob/master/mobile/build.gradle
źródło