support - unit test android
AndroidJUnit4.class está en desuso: ¿Cómo usar androidx.test.ext.junit.runners.AndroidJUnit4? (5)
Para mis pruebas de instrumentación estaba usando
@RunWith(AndroidJUnit4.class)
desde
import androidx.test.runner.AndroidJUnit4;
Para establecer mis casos de prueba.
Ahora esta línea se marca como obsoleta con la sugerencia de usar
AndroidJUnit4
desde
import androidx.test.ext.junit.runners.AndroidJUnit4
Sin embargo, si trato de importar
AndroidJUnit4
del paquete nombrado, obtengo el error, esa
ext
no se puede resolver.
¿Tiene una idea, qué paquete debe incluirse en Gradle para resolver este problema?
De acuerdo con la documentación para AndroidJUnit4 , el archivo gradle debe contener la siguiente línea:
androidTestImplementation ''androidx.test.ext:junit:1.1.0''
Después de agregar esto, todo funcionó para mí.
Si aún no funciona, asegúrese de limpiar y / o reconstruir su proyecto. También puede consultar la versión actual directamente en el repositorio de Google.
En mi caso, el cambio de
androidTestImplementation
to
testImplementation
ayudó.
No sabía la diferencia antes de leer esta
diferencia de Android entre testImplementation y androidTestImplementation en build.gradle
Intenté todos los pasos anteriores hasta que fui al sitio oficial de Android, y sugirieron importar desde
androidx.test.ext.junit.runners.AndroidJUnit4
lugar de
androidx.test.runner.AndroidJUnit4
.
enlazar
Para mí los siguientes pasos funcionaron:
1. Reemplace las bibliotecas de Android con la que está publicada
here
.
Mi
app/build.gradle
final
app/build.gradle
veía así:
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''
}
Luego reemplacé manualmente los módulos importados en mi clase
ExampleInstrumentTest.java
con las últimas clases:
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");
}
}
Lo que me estaba molestando era el hecho de que la clase
InstrumentationRegistery
todavía estaba en desuso.
Así que utilicé
InstrumentationRegistry.getInstrumentation().getTargetContext();
de la clase
androidx.test.platform.app.InstrumentationRegistry
.
Si ha probado la solución de @MellGangwisch y su compilación falla diciendo que no puede encontrar el recurso Y también limpió / reconstruyó su proyecto y aún no funciona, intente esto: (basado también en la solución de @ KrzysztofDziuba)
En su archivo de gradle donde cambió la dependencia, asegúrese de agregarla como el tipo que necesita, es decir:
Para pruebas de interfaz de usuario:
androidTestImplementation ''androidx.test.ext: junit: 1.1.0''
Para pruebas unitarias:
pruebaImplementación ''androidx.test.ext: junit: 1.1.0''
En mi caso lo agregué como ambos y ahora funciona.