Obtuve la siguiente excepción cuando traté de ejecutar el caso de prueba en junit5:
Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19:test (default-test) on project CRUD-App: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.19:test failed: There was an error in the forked process
org.junit.platform.commons.util.PreconditionViolationException: Cannot create Launcher without at least one TestEngine; consider adding an engine implementation JAR to the classpath
at org.junit.platform.commons.util.Preconditions.condition(Preconditions.java:161)
at org.junit.platform.launcher.core.DefaultLauncher.<init>(DefaultLauncher.java:52)
at org.junit.platform.launcher.core.LauncherFactory.create(LauncherFactory.java:42)
at org.junit.platform.surefire.provider.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:59)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:286)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:240)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)
pom.xml
<dependencies>
...
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit5-api</artifactId>
<version>5.0.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.0.0-M2</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
Clase de prueba:
public class PersonServiceTest {
final Database database = Database.from("jdbc:h2:mem:" + App.DB_NAME);
final PersonService personService = new PersonService(database);
public PersonServiceTest() {
}
@Test
@DisplayName("@Person#insert()")
public void testInsert() {
personService.insert(new PersonBuilder()
.setId(1).setName("Bhuwan")
.setAddress("KTM")
.setContactNo("984849").createPerson()
);
}
}
Objetivo experto: mvn test
sam brannen
mezclando ALFA artefactos de instantáneas (es decir, org.junit:junit5-api:5.0.0-SNAPSHOT
) con M2 artefactos (es decir, org.junit.platform:junit-platform-surefire-provider:1.0.0-M2
), no funcionará.
El Experto sección en la guía del usuario sugiere revisar el pom.xml
desde el junit5-maven-consumidor proyecto. Si sigue ese ejemplo, terminará con algo como lo siguiente.
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<junit.jupiter.version>5.0.0-M2</junit.jupiter.version>
<junit.platform.version>1.0.0-M2</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>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>${junit.platform.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
A escribir tus pruebas, solo necesitas la junit-jupiter-api
; sin embargo, para correr tus pruebas debes tener un TestEngine
en el classpath. Para JUnit Júpiter, por lo tanto, necesita junit-jupiter-engine
en el classpath también.
Como señaló Nicolai Parlog, podría agregar junit-jupiter-engine
como una dependencia para el maven-surefire-plugin
; sin embargo, eso no incluiría la JupiterTestEngine
en el classpath para su IDE.
Si solo está ejecutando pruebas a través de Maven o con una versión beta reciente de IntelliJ 2016 (que tiene soporte integrado para JUnit 5), es posible que no le importe si JupiterTestEngine
está en el classpath en su IDE. Pero… si está usando Eclipse, NetBeans o una versión no beta de IntelliJ, definitivamente querrá la JupiterTestEngine
en el classpath en el IDE también.
Saludos,
sam (Comitedor principal de JUnit 5)
Terminé aquí desde que obtuve el mismo error al usar Gradle y JUnit 4. La solución en este caso se puede encontrar en el documentos:
La plataforma JUnit puede ejecutar pruebas basadas en JUnit 4 siempre que configure una dependencia testImplementation en JUnit 4 y una dependencia testRuntimeOnly en la implementación JUnit Vintage TestEngine similar a la siguiente.
También se necesita un motor de prueba:
dependencies {
testImplementation("junit:junit:4.13.2")
testRuntimeOnly("org.junit.vintage:junit-vintage-engine:5.8.2")
}
Nicolai Parlog
El complemento Maven Surefire no solo necesita el proveedor JUnit 5 sino también un TestEngine
implementación para ejecutar pruebas. Para citar el Documentos JUnit 5:
Para que Maven Surefire ejecute cualquier prueba, un
TestEngine
la implementación debe agregarse a la ruta de clase en tiempo de ejecución.
De acuerdo con eso, los siguientes trabajos:
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.0.0-M4</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.0.0-M4</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.0.0-M4</version>
<scope>test</scope>
</dependency>
</dependencies>
Tenga en cuenta que esta configuración hace que el motor dependa del complemento surefire, no de su código de prueba.
simplemente agregando la dependencia a continuación resolvió este problema.
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
lo soluciono cambiando
classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.8.RELEASE"
a
classpath "org.springframework.boot:spring-boot-gradle-plugin:2.2.0.RELEASE"