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

Lesezeit: 5 Minuten

Für meine Instrumentierungstests habe ich verwendet

@RunWith(AndroidJUnit4.class)

aus

import androidx.test.runner.AndroidJUnit4;

um meine Testfälle zu etablieren. Jetzt wird diese Zeile mit dem Hinweis zur Verwendung als veraltet markiert AndroidJUnit4 aus

import androidx.test.ext.junit.runners.AndroidJUnit4

Wenn ich jedoch versuche zu importieren AndroidJUnit4 aus dem benannten Paket bekomme ich den Fehler, dass ext kann nicht gelöst werden.

Haben Sie eine Idee, welches Paket in Gradle enthalten sein sollte, um dieses Problem zu lösen?

  • stackoverflow.com/questions/43342831/…

    – IntelliJ Amiya

    12. Oktober 2018 um 9:44 Uhr

  • Ich denke, Ihre Quelle ist veraltet, sie erwähnen Androidx überhaupt nicht.

    – Marcel Gangwisch

    12. Oktober 2018 um 9:48 Uhr

  • Das Testen von Einheiten auf Android ist ein völliges Durcheinander von Fehlern und Verwerfungen. Das einzige, was für mich funktioniert, ist das Erstellen eines neuen Scratch-Projekts, das Kopieren der relevanten Dateien aus diesem Projekt in meins, das Umschalten in den Debug-Modus und das Ausführen einer vollständigen Cache-Invalidierung. Auch für AndroidJUnit4-Tests muss der Paketname mit dem Bibliothekspaketnamen übereinstimmen.

    – Rupert Rawnsley

    4. Oktober 2019 um 14:08 Uhr


Benutzer-Avatar
Marcel Gangwisch

Entsprechend die Dokumentation für AndroidJUnit4,

  1. Die Gradle-Datei sollte die folgende Zeile enthalten:

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

  1. Ändern Sie die Testklasse in AndroidJUnit4ClassRunner aus AndroidJUnit4

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 einchecken Das Maven-Repository von Google

  • Mein Gradle hat das und kann das Problem immer noch nicht lösen.

    – zuko

    1. Dezember 2018 um 18:10 Uhr

  • @zuko Bereinigen und/oder erstellen Sie Ihr Projekt neu, es sollte vorhanden sein. Wenn dies immer noch nicht der Fall ist und Sie Module verwenden, überprüfen Sie, ob Ihre Abhängigkeitshierarchie wie erwartet eingerichtet ist. Möglicherweise müssen Sie diese auch zu den Modulen der obersten Ebene hinzufügen, da Testbibliotheken nicht in gemeinsam genutzte Module zur Verwendung durch Upstream-Module kompiliert werden.

    – Jon Adams

    28. Dezember 2018 um 1:58 Uhr

  • @JonAdams Mein Abhängigkeitsbaum hielt aus irgendeinem Grund an einem Verweis auf ältere Bibliotheken fest, obwohl ich dachte, ich hätte sie entfernt. Nachdem ich verschiedene Dinge ausprobiert hatte, habe ich das Projekt einfach auf ein neues migriert und jetzt ist alles in Ordnung.

    – zuko

    29. Dezember 2018 um 20:50 Uhr


  • Sollen wir uns auch ändern testInstrumentationRunner in der Gradle-Datei aus androidx.test.runner.AndroidJUnitRunner zu androidx.test.ext.junit.runners.AndroidJUnit4? Ich frage mich nur, ob es eine Diskrepanz gibt.

    – Ein Droide

    2. Februar 2019 um 9:17 Uhr

  • @A Droid Ersetzen Sie das alte AndroidJUnit4-Paket beim Import durch ein neues. Ersetzen Sie einfach import androidx.test.runner.AndroidJUnit4; mit Import androidx.test.ext.junit.runners.AndroidJUnit4;

    – Xplosiv

    8. Februar 2019 um 19:15 Uhr


Wenn Sie die Lösung von @MarcelGangwisch ausprobiert haben und Ihr Build fehlschlägt und sagt, dass er die Ressource nicht finden kann UND Sie Ihr Projekt auch bereinigt/neu erstellt haben und es immer noch nicht funktioniert, versuchen Sie Folgendes: (basierend 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 als den Typ hinzufügen, den Sie benötigen, dh:

Für UI-Tests:

androidTestImplementation ‘androidx.test.ext:junit:1.1.0’

Für Unit-Tests:

testImplementierung ‘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 funktioniert:
1. Ersetzen Sie die androidx-Bibliotheken durch die geposteten hier . mein Finale 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'

}

Die importierten Module habe ich dann manuell in meiner ersetzt ExampleInstrumentTest.java Klasse mit neusten Klassen:

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 InstrumentationRegistery Klasse war immer noch veraltet. Also habe ich verwendet InstrumentationRegistry.getInstrumentation().getTargetContext(); aus androidx.test.platform.app.InstrumentationRegistry Klasse.

  • @RunWith(AndroidJUnit4ClassRunner.class) war der Teil, der das Problem in meinem Fall gelöst hat. Ich verstehe nicht wirklich, warum Android Studio manchmal veralteten Code generiert.

    – Rafsandschani

    18. Juni 2019 um 10:08 Uhr

  • Verwenden ApllicationProvider.getApplicationContext<Context>() Anstatt von InstrumentationRegistry.getInstrumentation().getTargetContext();

    – Mitsch

    20. September 2019 um 16:37 Uhr

Benutzer-Avatar
HeshanHH

Lösung

  1. Fügen Sie diese Zeile zu build.gradle hinzu: androidTestImplementation 'androidx.test.ext:junit:1.1.1'

  2. Veränderung AndroidJUnit4 zu AndroidJUnit4ClassRunner in der Testklasse

Warnung

Ich habe den gleichen Fehler erhalten, aber die folgende Lösung ist für mich fehlgeschlagen:

Datei -> Caches ungültig machen … und wählen Sie ungültig machen und neu starten

Ich habe alles oben Gesagte ausprobiert, bis ich zur offiziellen Android-Website ging, und sie schlugen vor, von zu importieren androidx.test.ext.junit.runners.AndroidJUnit4 Anstatt von androidx.test.runner.AndroidJUnit4. Verknüpfung

Benutzer-Avatar
hat

  1. Fügen Sie diese Zeilen in das App-Modul build.gradle ein.

    testImplementation ‘androidx.test.ext:junit:1.1.1’ androidTestImplementation ‘androidx.test.ext:junit:1.1.1’

  2. In der Testklasse tauschen Sie Ihren Testläufer aus

    import androidx.test.ext.junit.runners.AndroidJUnit4;

  3. Wenn InstrumentationRegistry.getTargetContext() ist veraltete Verwendung InstrumentationRegistry aus androidx.test.platform.app so was

    InstrumentationRegistry.getInstrumentation().getTargetContext()

Benutzer-Avatar
Krzysztof Dziuba

In meinem Fall wechseln androidTestImplementation zu testImplementation geholfen. Ich kannte den Unterschied nicht, bevor ich diesen Android-Unterschied zwischen testImplementation und androidTestImplementation in build.gradle gelesen habe

1351320cookie-checkAndroidJUnit4.class ist veraltet: Wie verwende ich androidx.test.ext.junit.runners.AndroidJUnit4?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy