私はjunit5でテストケースを実行しようとしたときに次のexecptionを得ました:
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>
テストクラス:
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()
);
}
}
Mavenの目標:mvn test
まず、ミキシング[〜#〜] alpha [〜#〜]スナップショットアーティファクト(つまり、org.junit:junit5-api:5.0.0-SNAPSHOT
)M2アーティファクト(つまり、org.junit.platform:junit-platform-surefire-provider:1.0.0-M2
)、これは機能しません。
ユーザーガイドの Maven セクションでは、 pom.xml
junit5-maven-consumer プロジェクトから。その例に従うと、次のような結果になります。
<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>
テストをwriteするには、junit-jupiter-api
;ただし、テストをrunするには、クラスパスにTestEngine
が必要です。したがって、JUnit Jupiterの場合はjunit-jupiter-engine
クラスパスにも。
Nicolai Parlogが指摘したように、junit-jupiter-engine
の依存関係としてmaven-surefire-plugin
;ただし、IDEのクラスパスにJupiterTestEngine
は含まれません。
Mavenを介して、またはIntelliJ 2016の最近のベータバージョン(JUnit 5の組み込みサポートを使用)のみでテストを実行している場合、IDEのクラスパスにJupiterTestEngine
が存在するかどうかは気にしません。しかし... Eclipse、NetBeans、または非ベータ版のIntelliJを使用している場合は、IDE asのクラスパスにJupiterTestEngine
が必ず必要です。上手。
よろしく、
サム(コアJUnit 5コミッター)
Maven Surefireプラグインには、JUnit 5プロバイダーだけでなく、テストを実行するためのTestEngine
実装も必要です。 JUnit 5 docs を引用するには:
Maven Surefireでテストを実行するには、ランタイムクラスパスに
TestEngine
実装を追加する必要があります。
それに応じて、以下が機能します。
<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>
この構成により、エンジンは、テストコードのnotsurefireプラグインの依存関係になることに注意してください。