it-swarm.com.de

AndroidJUnit4.class ist veraltet: Wie verwende ich androidx.test.ext.junit.runners.AndroidJUnit4?

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?

160

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

213

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.

13
JJ Du Plessis

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.

4
ansh sachdeva

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

3
Prox

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

2