java - how - intellij idea generate test
IntelliJ IDEA con Junit 4.7 “!!! Se espera la versión 3.8 o posterior de JUnit: " (16)
Cuando intento ejecutar la siguiente prueba en IntelliJ IDEA , recibo el mensaje:
"!!! Se espera la versión 3.8 o posterior de JUnit:"
Cabe señalar que este es un proyecto de Android que estoy trabajando en IntelliJ IDEA 9.
public class GameScoreUtilTest {
@Test
public void testCalculateResults() throws Exception {
final Game game = new Game();
final Player player1 = new Player();
{
final PlayedHole playedHole = new PlayedHole();
playedHole.setScore(1);
game.getHoleScoreMap().put(player1, playedHole);
}
{
final PlayedHole playedHole = new PlayedHole();
playedHole.setScore(3);
game.getHoleScoreMap().put(player1, playedHole);
}
final GameResults gameResults = GameScoreUtil.calculateResults(game);
assertEquals(4, gameResults.getScore());
}
}
La traza de pila completa se ve así ...
!!! JUnit version 3.8 or later expected:
java.lang.RuntimeException: Stub!
at junit.runner.BaseTestRunner.<init>(BaseTestRunner.java:5)
at junit.textui.TestRunner.<init>(TestRunner.java:54)
at junit.textui.TestRunner.<init>(TestRunner.java:48)
at junit.textui.TestRunner.<init>(TestRunner.java:41)
at com.intellij.rt.execution.junit.JUnitStarter.junitVersionChecks(JUnitStarter.java:152)
at com.intellij.rt.execution.junit.JUnitStarter.canWorkWithJUnitVersion(JUnitStarter.java:136)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)
Process finished with exit code -3
Así lo resolví:
Editar configuraciones -> Valores predeterminados -> Android JUnit -> Agregue lo siguiente al Directorio de trabajo:
$ MODULE_DIR $
En el proyecto de Android tuve minifyEnabled = true
, después de cambiarlo a false
todo funcionó.
Este problema ocurre porque la plataforma Android ( android.jar
) ya contiene clases de JUnit. El corredor de prueba IDEA carga estas clases y ve que son del antiguo JUnit, mientras intenta utilizar pruebas anotadas, que es una característica del nuevo JUnit, por lo tanto, recibe el error del corredor de prueba.
La solución es simple, abre la Project Structure
| Modules
| Dependencies
, y mueva el junit-4.7.jar
hacia arriba, para que aparezca antes de la Android 1.6 Platform
en el classpath. Ahora el corredor de pruebas estará contento mientras carga la nueva versión de JUnit.
Esto también me sucedió a mí en Android Studio 1.1, aunque debería soportar pruebas unitarias sin un complemento.
En otras máquinas (el mismo proyecto, la misma versión de AS) encontré que al ejecutar pruebas unitarias, el IDE no agrega el archivo android.jar a la ruta de clase, mientras que en mi máquina lo hace.
Mi mejor conjetura fue que debido a la conversión que hicimos de Maven a Gradle y al pasar de intellij a AS, quedaron algunos ajustes de caché en algún lugar de mi máquina que causaron que se agregara android.jar al classpath.
Lo que hice fue borrar todos los cachés relacionados con Android de mi máquina (en la carpeta c: / users / USRE_NAME): .android .AndroidStudio .gradle .m2
Después de eso reabrí el proyecto y las pruebas funcionaron.
Sigo intentando entender qué salió mal, pero esto debería hacer el truco por ahora.
Hay dos cosas que podría imaginar que sucedan
- Si su IDE intenta iniciar una prueba de Android Junit que se ejecuta directamente en el emulador, no puede utilizar Junit4.
- Si accidentalmente usaste las clases junit provistas desde el android jar, no pueden ejecutarse en un jvm normal porque solo hay clases compiladas reales para el android dalvik vm.
Para Android Studio: a partir de Android Studio 1.1 Beta 4 , Google ha agregado soporte para Android Gradle plugin 1.1.0-RC . El nuevo complemento soporta Unit Testing a través de Android Studio usando junit 4+.
Esto todavía es experimental y hay algunos pasos manuales para configurar esto.
Para todos los que están leyendo esta publicación y aún tienen el mismo problema con AndroidStudio 1.0. No puede cambiar el orden de dependencia en AndroidStudio si el IDE los vuelve a escribir automáticamente. E incluso si logra cambiar el orden modificando el archivo .iml, obtendrá una "clase no encontrada ...". Esto se debe a que la ruta de salida de prueba no se puede establecer en AndroidStudio.
En realidad, hay una solución para hacer que AndroidStudio, Junit y Robolectric trabajen juntos. Eche un vistazo a este https://github.com/JCAndKSolutions/android-unit-test y use este complemento también: https://github.com/evant/android-studio-unit-test-plugin
Funciona perfectamente para mi.
Recibí el mismo error al crear Unit Test
y Android Instrument Test
en Android Studio 1.4+ y comenzó a confundirse. Para evitar este error, asegúrese de que su clase de prueba esté incluida en Android Tests
en Run/Debug Configurations
- Asegúrese de seguir las instrucciones correctamente https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html
- Asegúrate de que
Test Artifact
inBuild Variants
esté configurado enAndroid Instrumentation Tests
- Haga clic en el menú
Run
>Edit Configuration
- Asegúrese de que el nombre de su clase / método esté dentro de
Android Tests
lugar deJUnit
- Si está en
JUnit
simplemente elimine la configuración y haga clic derecho en el archivo que desea probar yRun
nuevamente. Luego creará la configuración en la secciónAndroid Tests
y se ejecutará en el dispositivo / emulador.
Si eliminas
testOptions {
unitTests.returnDefaultValues = true
}
desde tu build.gradle
funcionará
También estaba enfrentando el mismo problema, después de cambiar a build.gradle, está funcionando bien para mí.
cambia tu versión junit dentro de build.gradle a:
testImplementation ''junit:junit:3.8''
Tengo el mismo error cuando he creado mi propio paquete junit
Para solucionar este problema, he agregado estas dos líneas en mi archivo gradle de la aplicación como se explica here :
dependencies {
...
// Required -- JUnit 4 framework
testCompile ''junit:junit:4.12''
// Optional -- Mockito framework
testCompile ''org.mockito:mockito-core:1.10.19''
}
Tuve el mismo problema pero por otra razón. Estaba en IntelliJ con un proyecto regular de Java Gradle (no en Android) pero el JDK se configuró para el SDK de Android en la Project Structure
(fue el JDK predeterminado por algunas razones). Esto es realmente tonto, pero IntelliJ no fue lo suficientemente bueno como para indicarme qué es lo que está mal, así que me quedé atascado en eso.
Tuve este problema con un proyecto de varios módulos (libgdx). Un módulo es Java puro y tiene pruebas. Mi solución fue establecer "usar JRE alternativo" a "Java 1.8" en la configuración de ejecución de mis pruebas unitarias. Esto asegura que no haya android.jar en el classpath y que se use el corredor junit 4.x.
Tuve este problema en Android Studio 1.5, porque no sabía que tenía que cambiar la configuración "Probar artefacto" en "Variantes de construcción" (esquina inferior izquierda de la ventana principal) de "Pruebas de instrumentación de Android" a "Pruebas de unidad ". Cuando lo haga, puede ver un archivo ExampleUnitTest.java en la ventana Proyecto.
Vaya a Estructura del proyecto -> Configuración de plataforma, cambie SDK a 1.8 solucionado mi problema.