web-dev-qa-db-ja.com

少なくとも1つのTestEngineなしでランチャーを作成できません。エンジン実装JARをJunit 5のクラスパスに追加することを検討してください

私は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

21
developerbhuwan

まず、ミキシング[〜#〜] alpha [〜#〜]スナップショットアーティファクト(つまり、org.junit:junit5-api:5.0.0-SNAPSHOTM2アーティファクト(つまり、org.junit.platform:junit-platform-surefire-provider:1.0.0-M2)、これは機能しません。

ユーザーガイドの Maven セクションでは、 pom.xmljunit5-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コミッター

24
Sam Brannen

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プラグインの依存関係になることに注意してください。

8
Nicolai