web-dev-qa-db-fra.com

AndroidJUnit4.class est obsolète: comment utiliser androidx.test.ext.junit.runners.AndroidJUnit4?

J'utilisais pour mes tests d'instrumentation

@RunWith(AndroidJUnit4.class)

de

import androidx.test.runner.AndroidJUnit4;

afin d'établir mes cas de test. Maintenant, cette ligne est marquée comme obsolète avec l’allusion à utiliser AndroidJUnit4 de

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

Cependant, si j'essaie d'importer AndroidJUnit4 à partir du paquet nommé, l'erreur est générée, cette ext ne peut pas être résolue.

Avez-vous une idée du type de package à inclure dans Gradle pour résoudre ce problème?

160
Marcel Gangwisch

Selon la documentation pour AndroidJUnit4 , le fichier de classement doit contenir la ligne suivante:

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

Après avoir ajouté cela, tout a fonctionné pour moi.

Si cela ne fonctionne toujours pas, assurez-vous de nettoyer et/ou de reconstruire votre projet. Vous pouvez aussi consulter la version actuelle directement dans le référentiel maven de Google

213
Marcel Gangwisch

Si vous avez essayé la solution de @ MarcelGangwisch et que votre construction échoue en indiquant qu'elle ne trouve pas la ressource ET que vous avez également nettoyé/reconstruit votre projet et qu'il ne fonctionne toujours pas, essayez ceci: (basé également sur la solution de @ KrzysztofDziuba)

Dans votre fichier de classement où vous avez modifié la dépendance, assurez-vous de l'ajouter au type dont vous avez besoin, c'est-à-dire:

Pour les tests d'interface utilisateur:

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

Pour les tests unitaires:

testImplementation 'androidx.test.ext: junit: 1.1.0'

Dans mon exemple, je l'ai ajouté comme les deux et maintenant cela fonctionne.

13
JJ Du Plessis

Pour moi, les étapes suivantes ont fonctionné:
1. Remplacez les bibliothèques androidx par celle publiée ici . ma dernière app/build.gradle ressemblait à ceci:

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'

}

J'ai ensuite remplacé manuellement les modules importés de ma classe ExampleInstrumentTest.Java par les dernières classes:

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");
    }
}

Ce qui me dérangeait, c’était le fait que la classe InstrumentationRegistery était toujours dépréciée. J'ai donc utilisé InstrumentationRegistry.getInstrumentation().getTargetContext(); de androidx.test.platform.app.InstrumentationRegistry class.

4
ansh sachdeva

J'ai essayé toutes les réponses données ci-dessus jusqu'à ce que je me rende sur le site officiel Android. Ils ont alors suggéré d'importer à partir de androidx.test.ext.junit.runners.AndroidJUnit4 au lieu de androidx.test.runner.AndroidJUnit4. lien

3
Prox

Dans mon cas, changer androidTestImplementation en testImplementation m'a aidé. Je ne connaissais pas la différence avant de lire ceci Différence Android entre testImplementation et androidTestImplementation dans build.gradle

2
Krzysztof Dziuba