IntelliJ IDEA con Junit 4.7 “!!! JUnit versión 3.8 o posterior esperado: “

Cuando bash ejecutar la siguiente prueba en IntelliJ IDEA , recibo el mensaje:

“¡¡¡JUnit versión 3.8 o posterior esperado:”

Cabe señalar que este es un proyecto de Android en el 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 la stack completa se ve así …

 !!! JUnit version 3.8 or later expected: java.lang.RuntimeException: Stub! at junit.runner.BaseTestRunner.(BaseTestRunner.java:5) at junit.textui.TestRunner.(TestRunner.java:54) at junit.textui.TestRunner.(TestRunner.java:48) at junit.textui.TestRunner.(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 

Este problema ocurre porque Android Platform ( android.jar ) ya contiene clases JUnit. El examinador de prueba de IDEA carga estas clases y ve que son del viejo JUnit, mientras que usted está tratando de usar pruebas anotadas, que es una característica del nuevo JUnit, por lo tanto, obtiene el error del corredor de prueba.

La solución es simple, abra la Project Structure | Modules | Dependencies , y mueva el junit-4.7.jar hacia arriba, de modo que venga antes de la Android 1.6 Platform en el classpath. Ahora el corredor de pruebas estará contento ya que carga la nueva versión de JUnit.

enter image description here

mi módulo es un módulo de biblioteca de Java, por lo que el cambio de JRE a 1.8 java resolvió el problema.

O bien, también puede hacerlo globalmente a través de Configuración del módulo> Ubicación del SDK> JDK, especificando el JDK 8 de Oracle en lugar de la copia del SDK de Android.

Tuve este problema con un proyecto de varios módulos (libgdx). Un módulo es puro Java 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 android.jar está en el classpath y se usa el 4. junit 4.x runner.

Obtuve el mismo error al crear la Unit Test y la Android Instrument Test Android en Android Studio 1.4+ y comenzó a confundirse. Para evitar este error, asegúrese de que su clase de prueba esté dentro de Android Tests en Run/Debug Configurations

  1. Asegúrese de seguir las instrucciones correctamente https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html
  2. Asegúrese de que Test Artifact en Build Variants esté configurado en Android Instrumentation Tests
  3. Haga clic en el menú Run > Edit Configuration
  4. Asegúrate de que el nombre de tu clase / método esté dentro de Android Tests lugar de JUnit
  5. Si está en JUnit simplemente elimine la configuración y haga clic con el botón secundario en el archivo que desea probar y Run nuevo. Luego creará la configuración en la sección Android Tests y se ejecutará en el dispositivo / emulador.

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 admite Pruebas unitarias a través de Android Studio utilizando junit 4+.

Esto todavía es experimental y hay algunos pasos manuales para configurarlo.

Para todos los que están leyendo esta publicación y todavía tienen el mismo problema con AndroidStudio 1.0. No puede cambiar el orden de dependencia en AndroidStudio tiene el IDE volver a escribirlos automáticamente. Y, incluso si logras cambiar el orden modificando el archivo .iml, obtendrás una “clase no encontrada …”. Esto se debe a que la ruta de salida de la prueba no se puede establecer en AndroidStudio.

En realidad, hay una solución para hacer que AndroidStudio, Junit y Robolectric trabajen en conjunto. Eche un vistazo a esta 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

Hay dos cosas que podría imaginar que suceda

  • Si su IDE intenta iniciar una prueba de Android Junit que se ejecuta directamente en el emulador, no puede usar Junit4.
  • Si utilizaste accidentalmente las clases junit proporcionadas desde el jar android, no pueden ejecutarse con un jvm normal porque solo hay clases reales comstackdas para el dalvik vm de android.

Esto también me sucedió en Android Studio 1.1, aunque debería soportar pruebas unitarias sin un complemento.

En otras máquinas (mismo proyecto, misma versión de AS) encontré que al ejecutar pruebas unitarias, el IDE no agrega el archivo android.jar al classpath, mientras que en mi máquina sí lo hace.

Mi mejor sospecha fue que debido a la conversión que hicimos de Maven a Gradle y al pasar de intellij a AS, un poco de caché de configuraciones permanecía en algún lugar de mi máquina que causaba que android.jar se agregara 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 volví a abrir el proyecto y las pruebas funcionaron.

Todavía estoy tratando de entender qué salió mal, pero esto debería ser el truco por el momento.

Tuve este problema en Android Studio 1.5, porque no sabía que tenía que cambiar la configuración de “Prueba de artefacto” en “Variantes de comstackción” (esquina inferior izquierda de la ventana principal) de “Pruebas de instrumentación de Android” a “Pruebas unitarias” “. Cuando lo haga, puede ver un archivo ExampleUnitTest.java en la ventana Proyecto.

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ó en el SDK de Android en Project Structure (fue el JDK predeterminado por alguna razón). Esto es realmente tonto, pero IntelliJ no fue lo suficientemente amable como para indicarme lo que está mal, así que me quedé atrapado en eso.

Tengo el mismo error cuando tengo crear mi propio paquete junit

enter image description here

Para solucionar esto, he agregado estas dos líneas en mi archivo gradle de aplicación como se explica aquí :

 dependencies { ... // Required -- JUnit 4 framework testCompile 'junit:junit:4.12' // Optional -- Mockito framework testCompile 'org.mockito:mockito-core:1.10.19' } 

Así es como lo resolví:

Editar configuraciones -> Valores predeterminados -> JUnit de Android -> Agregue lo siguiente al Directorio de trabajo:

$ MODULE_DIR $

En el proyecto de Android, tenía minifyEnabled = true , después de que lo cambiara a false funcionó todo.

Si eliminas

 testOptions { unitTests.returnDefaultValues = true } 

desde tu build.gradle funcionará

Vaya a Estructura del proyecto -> Configuración de plataforma, cambie los SDK a 1.8 resolvió mi problema.

También estaba enfrentando el mismo problema, después de cambiar a build.gradle, funciona bien para mí.

cambie su versión junit dentro de build.gradle a:

  testImplementation 'junit:junit:3.8'