Für meine Instrumentierungstests verwendete ich
@RunWith(AndroidJUnit4.class)
von
import androidx.test.runner.AndroidJUnit4;
um meine Testfälle festzustellen. Jetzt wird diese Zeile mit dem Hinweis markiert, dass AndroidJUnit4
from verwendet werden soll
import androidx.test.ext.junit.runners.AndroidJUnit4
Wenn ich jedoch versuche, AndroidJUnit4
aus dem angegebenen Paket zu importieren, wird der Fehler angezeigt, dass ext
nicht behoben werden kann.
Haben Sie eine Idee, welches Paket in gradle enthalten sein sollte, um dieses Problem zu beheben?
Laut der Dokumentation für AndroidJUnit4 sollte die gradle-Datei die folgende Zeile enthalten:
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
Nachdem ich dies hinzugefügt hatte, funktionierte alles für mich.
Wenn es immer noch nicht funktioniert, stellen Sie sicher, dass Sie Ihr Projekt bereinigen und/oder neu erstellen. Sie können die aktuelle Version auch direkt in Googles Maven-Repository überprüfen
Wenn Sie die Lösung von @ MarcelGangwisch ausprobiert haben und Ihr Build nicht sagt, dass die Ressource nicht gefunden werden kann, UND Sie Ihr Projekt auch bereinigt/neu erstellt haben und es immer noch nicht funktioniert, versuchen Sie Folgendes: (basiert auch auf der Lösung von @ KrzysztofDziuba)
Stellen Sie in Ihrer gradle-Datei, in der Sie die Abhängigkeit geändert haben, sicher, dass Sie sie dem Typ hinzufügen, den Sie benötigen, z.
Für UI-Tests:
androidTestImplementation 'androidx.test.ext: junit: 1.1.0'
Für Unit-Tests:
testImplementation 'androidx.test.ext: junit: 1.1.0'
In meinem Fall habe ich es als beides hinzugefügt und jetzt funktioniert es.
Bei mir haben folgende Schritte geklappt:
1. Ersetzen Sie die Androidx-Bibliotheken durch die veröffentlichte hier . mein letzter app/build.gradle
sah so aus:
Android {
...
defaultConfig {
...
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
...
}
dependencies {
...
testImplementation 'junit:junit:4.12'
// Core library
androidTestImplementation 'androidx.test:core:1.2.0'
// AndroidJUnitRunner and JUnit Rules
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test:rules:1.2.0'
// Assertions
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.ext:truth:1.2.0'
androidTestImplementation 'com.google.truth:truth:0.42'
// Espresso dependencies
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
Ich habe dann die importierten Module in meiner Klasse ExampleInstrumentTest.Java
manuell durch die neuesten Klassen ersetzt:
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4ClassRunner.class)
public class ExampleInstrumentedTest {
...
@Rule
public final ActivityTestRule<MainActivity> main = new ActivityTestRule<>(MainActivity.class, true);
@Before
public void init() {
...
}
@Test
public void listCount() {
...
}
@Test
public void useAppContext() {
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
Assert.assertEquals("in.curioustools.aad_x_testing2", appContext.getPackageName());
System.out.println("useAppContext : Test Ran");
}
}
Was mich nervte, war die Tatsache, dass die Klasse InstrumentationRegistery
immer noch veraltet war. Also habe ich InstrumentationRegistry.getInstrumentation().getTargetContext();
aus der Klasse androidx.test.platform.app.InstrumentationRegistry
verwendet.
Ich habe alles oben Genannte ausprobiert, bis ich zur offiziellen Seite von Android gegangen bin, und sie haben vorgeschlagen, aus androidx.test.ext.junit.runners.AndroidJUnit4
anstelle von androidx.test.runner.AndroidJUnit4
zu importieren. Link
In meinem Fall hat es geholfen, androidTestImplementation
in testImplementation
zu ändern. Ich kannte den Unterschied nicht, bevor ich dies las Android Unterschied zwischen testImplementation und androidTestImplementation in build.gradle