El problema
Siempre que ejecuto la prueba JUnit de mis proyectos (usando JUnit 5 con Java 9 y Eclipse Oxygen 1.a) me encuentro con el problema de que eclipse no puede encontrar ninguna prueba.
La descripción
Bajo la configuración de ejecución, eclipse ni siquiera puede encontrar el método que está anotado con @Test, sino que solo me muestra " (todos los métodos) ". Con suerte, la siguiente imagen ofrece una mejor visión de mi configuración:
Salida de consola:
java.lang.NoClassDefFoundError: org/junit/platform/launcher/core/LauncherFactory
at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.<init>(JUnit5TestLoader.java:31)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.base/java.lang.Class.newInstance(Unknown Source)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:368)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:363)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:307)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:222)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.launcher.core.LauncherFactory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 11 more
Lo que intenté hasta ahora
Ya lo intenté
- para eliminar la carpeta de prueba de la ruta de compilación y agregarla nuevamente.
- para comenzar la prueba colocando el cursor sobre el método anotado con @Test y luego haga clic en "Ejecutar como prueba JUnit".
- eliminar JUnit de Buildpath y agregarlo nuevamente
- reiniciar eclipse
- También moví el proyecto completo de una máquina a otra y lo probé con la instalación de eclipse provista allí
- para cambiar el nombre del método de prueba.
- para volver a escribir la anotación @Test
Algunos de estos pasos se pueden encontrar aquí , pero al final el problema persistió.
Respuestas:
Se encontró con el error de Eclipse 525948 que ya se ha corregido y que se publicará en la próxima versión Oxygen.3 (4.7.3), 21 de marzo de 2018.
Como solución alternativa, coloque su código de prueba en un proyecto separado y agregue el proyecto bajo prueba a la ruta del módulo, pero no agregue
module-info.java
a su proyecto de prueba. Con el nombre de su proyecto, clase y módulo, debería verse así:Vea también mi video que muestra Java 9 y JUnit 5 en Eclipse Oxygen.1a en acción
fuente
module-info.java
). En Eclipse, un proyecto Java tiene una única carpeta de salida y, por lo tanto, solo puede contener una o ningunamodule-info.java
. Pero puede agregar módulos a la ruta de módulo del proyecto aunque el proyecto no sea modular (no tienemodule-info.java
).Solucioné el problema haciendo clic con el botón derecho en la prueba y seleccionando 'Ejecutar configuraciones' y cambiando la selección "Ejecutor de prueba:" a 'JUnit 4' como se muestra aquí:
Ejecuté la prueba de nuevo y funcionó.
fuente
Tengo el mismo problema con STS 3.9.1. Parece un error de Eclipse, sin embargo, para solucionarlo, puede agregar una dependencia de prueba
junit-platform-launcher
a su proyecto ( https://mvnrepository.com/artifact/org.junit.platform/junit-platform-launcher )Así es como lo hice para mi proyecto que usa gradle:
dependencies { // other stuff here testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: "5.${junit5MinorVersion}" testCompile group: 'org.junit.platform', name: 'junit-platform-launcher', version: "1.${junit5MinorVersion}" }
archivo gradle.properties:
junit5MinorVersion=1.0
Creo que lo mismo se aplica si ve esta excepción mientras usa IntelliJ IDEA.
fuente
build.gradle
. Si está utilizando maven, espom.xml
. Sin embargo, el formato de maven es diferente.En mi caso, el problema era yo mismo y ningún IDE como Eclipse. He importado la clase de prueba JUnit 4.
Así que NO importe este:
import org.junit.Test // JUnit 4
Pero importa ese:
import org.junit.jupiter.api.Test // JUnit 5
fuente
Hasta ahora, las respuestas no abordaron el problema de compartir código con otras personas que no necesariamente usan Eclipse. He aquí una proposición. La clave es utilizar un perfil experto para resolver el caso Eclipse.
Se asume que ha definido una propiedad
junit5.version
en su pom como:<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit5.version>5.1.1</junit5.version> </properties>
luego en la
profiles
sección agregue lo siguiente:<profiles> <profile> <id>eclipse</id> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit5.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.1.1</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> </profile> </profiles>
Todo lo que tiene que hacer después de esto es seleccionar el perfil en su Eclipse local: Haga clic derecho en su proyecto y seleccione
Maven > Select Maven Profiles...
(o presione Ctrl+ Alt+ P), y luego verifique el perfil "eclipse" que acabamos de crear.Con eso has terminado. Su Eclipse ejecutará las pruebas de Junit 5 como se esperaba, pero la configuración que agregó no contaminará otras compilaciones u otro IDE
fuente
Agregar esta dependencia maven con JUnit Jupiter (v.5.5.1) resuelve el problema.
<dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.5.1</version> <scope>test</scope> </dependency>
fuente
SOLUCIÓN SIMPLE: (Agregar biblioteca JUnit 5)
INSTRUCCIONES:
fuente
Ninguna de las soluciones ayudó:
El problema es que Eclipse 2018-12 tiene soporte para JUnit 5.3.1. Si lo inicia con una versión anterior, fallará.
Así que asegúrese de utilizar al menos 5.3.1.
5.4.0 también funciona.
En caso de que su pom principal sea Spring Boot, debe asegurarse (en la administración de dependencias) de que junit-jupiter-api esté configurado en la misma versión. ¡No necesitas junit-platform-runner o -launcher !
fuente
<junit-jupiter.version>5.4.1</junit-jupiter.version>
para anular la versión utilizada en Spring boot (2.1.3.RELEASE).Siguiendo la respuesta de Andrii Karaivanskyi, aquí está la declaración de Maven POM:
<properties> ... <junit-jupiter.version>5.2.0</junit-jupiter.version> <junit-platform.version>1.2.0</junit-platform.version> ... </properties> <dependencies> ... <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit-jupiter.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>${junit-platform.version}</version> <scope>test</scope> </dependency> ... </dependencies>
ACTUALIZAR
Según el comentario de Alexander Wessel , puede usar org.junit: junit-bom como se describe en su respuesta a la pregunta Eclipse. No se encontraron pruebas con JUnit 5 causadas por NoClassDefFoundError para LauncherFactory .
fuente
scope=import type=pom
, luego agregue dependencias a junit-platform-launcher y junit-jupiter-engine en el alcance de la prueba, sin dar una versión en la sección de dependencias. La lista de materiales siempre se asegurará de que tenga solo una versión de JUnit Platform y Jupiter en classpath, y que las versiones respectivas sean las previstas (por ejemplo, 5.2.0 con 1.2.0).Para su información, otra causa de "No se encontraron pruebas con junit5" es (inadvertidamente o intencionalmente) declarar los casos de prueba "privados":
// Example of test case that doesn't get included @Test private void testSomeMethod() { }
Necesitan ser públicos.
fuente
También enfrenté el mismo problema, solo necesita agregar la biblioteca, la biblioteca Junit ya se proporciona junto con Eclipse, por lo que solo debe seguir a continuación
Ruta de compilación> Configurar ruta de compilación> biblioteca> Agregar biblioteca> JUnit> Siguiente> finalizar
Esto funciona para mi
fuente
Desde el principio, el mensaje de error le dice que la clase no se encuentra:
NoClassDefFoundError
eso significa que el PATH a junit es el problema.Presione clic derecho en la carpeta del proyecto y elija Propiedades O seleccione la carpeta del proyecto y presione la combinación cmd + i.
seleccione de la lista "Java Build Path".
Eso es todo. Intente ejecutar la prueba de nuevo.
fuente
deberías saber eso :
@Before de junit4 va con @Test: " import org.junit.Test "
Y
@BeforeEach de Junit5 va con: " import org.junit.jupiter.api.Test "
así que asegúrese de que está utilizando las importaciones de la misma versión de Junit, de lo contrario, supongo que no funcionará.
fuente
Usando STS 3.9.1 tengo el mismo problema. Sin embargo, actualmente no necesito ninguna característica nueva de JUnit5, así que intenté forzar el uso de una versión anterior. Si usa maven, puede agregar las siguientes dependencias a su pom.xml:
Esto funcionó para mí (al menos siempre que no necesite JUnit5 explícitamente).
fuente
Tuve el mismo problema después de crear un nuevo TestCase: Eclipse -> New -> JUnit Test Case. Crea una clase sin modificador de nivel de acceso. Podría resolver el problema simplemente poniendo un público antes de la palabra clave de clase .
fuente
Como todos informaron que es un error IDE, probé
Eclipse
ySTS
. En ambos casos, está fallando.Como solución alternativa, lo arreglé modificando el archivo pom.xml como se muestra a continuación.
He agregado estas dos dependencias maven
junit-jupiter-engine
yjunit-platform-launcher
.pom.xml
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit-jupiter.version}</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform launcher --> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>${junit-platform.version}</version> <scope>test</scope> </dependency> </dependencies>
Además, asegúrese de agregar la versión de ambas dependencias de maven en la etiqueta de propiedades.
<properties> <java.version>1.8</java.version> <junit-jupiter.version>5.2.0</junit-jupiter.version> <junit-platform.version>1.2.0</junit-platform.version> </properties>
fuente
Estoy usando eclipse 2019-09.
Tuve que actualizar la versión junit-bom al menos a 5.4.0. Anteriormente tenía 5.3.1 y eso causó los mismos síntomas del OP.
Mi configuración es ahora:
<dependencyManagement> <dependencies> <dependency> <groupId>org.junit</groupId> <artifactId>junit-bom</artifactId> <version>5.5.2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
fuente
Dado que no es posible publicar bloques de código en comentarios, aquí está la plantilla POM que estoy usando en proyectos que requieren JUnit 5. Esto permite construir y "Ejecutar como JUnit Test" en Eclipse y construir el proyecto con Maven simple.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>group</groupId> <artifactId>project</artifactId> <version>0.0.1-SNAPSHOT</version> <name>project name</name> <dependencyManagement> <dependencies> <dependency> <groupId>org.junit</groupId> <artifactId>junit-bom</artifactId> <version>5.3.1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <scope>test</scope> </dependency> <dependency> <!-- only required when using parameterized tests --> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
Puede ver que ahora solo tiene que actualizar la versión en un lugar si desea actualizar JUnit. Además, el número de versión de la plataforma no necesita aparecer (en una versión compatible) en ningún lugar de su POM, se administra automáticamente a través de la
junit-bom
importación.fuente
Estoy usando:
Spring Tool Suite 4 Versión: 4.4.2.RELEASE ID de compilación: 201911201053 Versión de Java: 1.8.0_191
y el mensaje que se muestra es No se encontraron pruebas con el corredor de pruebas 'JUnit5'
lo que funcionó para mí fue la configuración a continuación
<properties> <java.version>1.8</java.version> <junit-jupiter.version>5.5.2</junit-jupiter.version> <junit-platform.version>1.5.2</junit-platform.version> </properties> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit-jupiter.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>${junit-platform.version}</version> <scope>test</scope> </dependency>
fuente
Falta el lanzador de la plataforma JUnit 5 con el grupo: 'org.junit.platform', nombre: 'junit-platform-launcher'
Simplemente agregue su POM:
fuente
El mismo error que enfrenté en la versión de eclipse Oxygen.3a Release (4.7.3a). Hay un problema en la falta de coincidencia de las dependencias de Maven. Para resolver, he actualizado mi Pom.xml con las siguientes dependencias.
http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0 com.netapp.junitnmactiopractice JunitAndMactioPractice 0.0.1-SNAPSHOT
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <junit.jupiter.version>5.1.1</junit.jupiter.version> <junit.platform.version>1.1.1</junit.platform.version> </properties> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit.jupiter.version}</version> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-runner</artifactId> <version>${junit.platform.version}</version> <scope>test</scope> </dependency> </dependencies>
fuente
junit-platform-runner
: " Ejecutor para ejecutar pruebas y conjuntos de pruebas en la plataforma JUnit en un entorno JUnit 4 "?Sólo se puede utilizar
junit-jupiter
como una dependencia prueba en lugar dejunit-jupiter-api
,junit-platform-launcher
,junit-jupiter-engine
.<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.5.2</version> <scope>test</scope> </dependency>
fuente
Para mí, configuré la ruta de compilación para agregar la biblioteca JUnit 5 y también agregando la dependencia
<dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.1.0</version> <scope>test</scope> </dependency>
por separado.
fuente
También enfrenté este problema con Eclipse (Versión: 2019-12 (4.14.0)). La solución parece usar IntelliJ o usar la prueba de Maven para ejecutar tales pruebas en Eclipse.
fuente
En realidad, utilicé spring-tool-suite-4-4.5.1 y tuve este error cuando quería ejecutar una clase de prueba. y la solución fue agregar a 'java build path', 'junit5' en Bibliotecas java build path img
fuente
deberías cambiar
@Test public static void testmethod(){}
a
@Test public void testmethod(){}
el @Test no admite el método estático
fuente
Me encontré con el mismo error y, en mi caso, fue una simple cuestión de ir
Project Properties > Maven > Update project
y / o limpiar y reconstruir el proyecto.fuente
Acabo de agregar mi Test.class a través del menú de eclipse y funcionó. Haga clic derecho para proyectar -> Nuevo -> Otro -> JUnit -> Caso de prueba JUnit
fuente
Puede ser causado por la versión de junit-platform-launcher / junit-platform-runner.
1.1.0 no funciona
1.4.1 funciona en mi configuración.
Creo que esto es un error en eclipse, ya que funciona con bibliotecas de versiones superiores de junit y no con otra versión.
Esto resolvió mi problema. La otra resolución me pareció menos factible o arriesgada. Gracias.
fuente
Cuando cambio mi versión de la api de jupiter a la última, se resolvió. Mientras tanto, mi eclipse y otras extensiones de eclipse ide (como STS) están obteniendo un error de ruta de compilación. Para cada actualización de maven, ide me obliga a configurar la biblioteca del sistema JRE.
fuente