JUnit 5로 간단한 테스트 방법을 작성했습니다.
public class SimlpeTest {
@Test
@DisplayName("Some description")
void methodName() {
// Testing logic for subject under test
}
}
하지만 실행 mvn test
하면 다음을 얻었습니다.
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running SimlpeTest
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
어쨋든, 확실한 테스트 클래스는 인식하지 못했습니다. 내 pom.xml
모습 :
<properties>
<java.version>1.8</java.version>
<junit.version>5.0.0-SNAPSHOT</junit.version>
</properties>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit5-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>snapshots-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<updatePolicy>always</updatePolicy>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
이 작업을 수행하는 방법을 아십니까?
답변
는 maven-surefire-plugin
, 오늘로, 않습니다 JUnit을 5의 전체를 지원하지 . SUREFIRE-1206 에이 지원을 추가하는 것에 대한 미해결 문제가 있습니다.
따라서 사용자 지정 공급자 를 사용해야합니다 . 하나는 이미 JUnit 팀에 의해 개발되었습니다. 으로부터 사용자 가이드 , 당신은 추가 할 필요가 junit-platform-surefire-provider
제공하고 TestEngine
새로운 API의 구현 :
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<!-- latest version (2.20.1) does not work well with JUnit5 -->
<version>2.19.1</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.0.3</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.0.3</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
또한 다음 junit-jupiter-api
과 같은 범위로 종속성 을 선언해야합니다 test
.
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.0.3</version>
<scope>test</scope>
</dependency>
</dependencies>
답변
업데이트 2
Maven Surefire Plugin v2.22.0에서 문제 가 수정되었습니다.
Maven Central Repository에서 새 버전 을 사용할 수 있습니다.
메이븐
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</dependency>
Gradle
compile group: 'org.apache.maven.plugins', name: 'maven-surefire-plugin', version: '2.22.0'
최신 정보
으로 마리아는 지적, 최신 버전 의 JUnit 5 플랫폼 확실한 공급자 (1.2.0) 의 최신 버전을 지원 메이븐 확실한 플러그인 (2.21.0)를 :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
</plugin>
예
pom.xml
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.2.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
TestScenario.java
package test;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
public class TestScenario {
@Test
@DisplayName("Test 2 + 2 = 4")
public void test() {
Assertions.assertEquals(4, 2 + 2);
}
}
출력 (mvn 새로 설치)
…
[정보] — maven-surefire-plugin : 2.21.0 : test (default-test) @ test — [정보]
[정보] ————– —————————————–
[정보] 테스트
[정보]- ————————————————– —
[INFO] Running test.TestScenario
[INFO] 테스트 실행 : 1, 실패 : 0, 오류 : 0, 건너 뜀 : 0, 경과 시간 : 0.005 초-in test.TestScenario
[INFO]
[INFO] 결과 :
[INFO ]
[정보] 테스트 실행 : 1 , 실패 : 0, 오류 : 0, 건너 뛰기 : 0
…
오늘까지 가장 간단한 방법 :
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.1.0</version>
</dependency>
</dependencies>
</plugin>
답변
보내는 사람 의 JUnit 5 문서 :
버전부터
2.22.0
Maven Surefire는 JUnit 플랫폼에서 테스트를 실행하기위한 기본 지원을 제공합니다.
또한 maven-surefire-plugin
문서 에서 읽을 수 있습니다 .
JUnit 5 플랫폼 사용
JUnit Platform을 시작하려면
TestEngine
프로젝트에 하나 이상의 구현을 추가해야합니다
. 예를 들어 Jupiter로 테스트를 작성junit-jupiter-engine
하려면 POM의 종속성에 테스트 아티팩트 를 추가하십시오.
따라서 JUnit 5 테스트를 실행하기에 충분합니다.
<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>davidxxx</groupId>
<artifactId>minimal-pom-junit5</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<junit-jupiter.version>5.2.0</junit-jupiter.version>
<!--optional below but good practice to specify our java version-->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
<!--optional below -->
<!-- add any JUnit extension you need such as -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</plugin>
</plugins>
</build>
</project>
내 GitHub 공간에서 탐색 / 복제 할 수있는 작동하는 샘플 Maven 프로젝트를 추가했습니다.
URL : https://github.com/ebundy/junit5-minimal-maven-project
답변
JUnit5와 Maven에서이 문제에 부딪 혔지만 junit-jupiter-engine 만 종속성으로 추가 된 경우에도 테스트가 다른 프로젝트가 아닌 일부 프로젝트에서 실행 된다는 사실을 발견 했습니다. . 그리고 저는 여기 주석에서 동일한 패턴을 봅니다. 위의 @Alex 주석에서 그는 이전 버전의 surefire / junit / platform에서도 문제가 없음을 알 수 있습니다.
몇 시간 동안 내 머리를 긁적 후 나는 테스트가 실행되지 않을 것입니다 해당 프로젝트가 시험의 경우 그했다 실현 방법의 이름은 DIT 없는 단어 “테스트”를 포함합니다. http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html 에 의해 의무화되지는 않지만
즉, 그냥
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.2.0</version>
<scope>test</scope>
</dependency>
이
@Test
public void something() {
assertTrue(true);
}
실행되지 않는 반면
@Test
public void testSomething() {
assertTrue(true);
}
실행됩니다!
이번 호는 러시아 인형으로 전개된다 …
어쨌든 업데이트 된 답변이 모든 문제를 한 번에 해결하는 @Mikhail Kholodkov에게는 +1!
답변
2019 년 8 월에 여기에서 물었던 동일한 문제가 발생했습니다. Maven이 .NET을 실행할 JUnit 테스트를 자동으로 찾지 못했습니다 . 이 대답은 저를 올바른 방향으로 이끌었지만 문제를 더 간결하게 해결할 수 있다는 것을 알았습니다. JUnit5 샘플 Maven 프로젝트 에서 내 솔루션을 복사 했습니다. .
JUnit 5.5.1 및 maven-surefire-plugin
2.22.2부터는 junit-platform-surefire-provider
종속성 을 추가 할 필요가 없습니다 . 이 하나의 종속성과 하나의 플러그인을 지정하면 충분합니다 pom.xml
.
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
</plugins>
</build>
답변
보완하기 위해 surefire 2.22.0 + junit 5.2.0 + platform 1.2.0도 작동합니다. 첨부 파일은 귀하의 추천에 대한 작업 pom입니다.
<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jjhome.junit5</groupId>
<artifactId>junit5-hone</artifactId>
<packaging>jar</packaging>
<version>1.0.0-SNAPSHOT</version>
<name>junit5-home</name>
<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit5.version>5.2.0</junit5.version>
<platform.version>1.2.0</platform.version>
<surefire.version>2.22.0</surefire.version>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>${platform.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>${platform.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.version}</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>${platform.version}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit5.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
답변
제 경우에는 클래스 경로 ( SUREFIRE-1527 ) 의 TestNG 때문이었습니다 . Groovy 2.5.5 POM은groovy-testng
모듈 .
수동으로 지정된 테스트 프레임 워크 공급자 ( https://maven.apache.org/surefire/maven-surefire-plugin/examples/providers.html에 설명되어 있음 )가 문제를 해결했습니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit-platform</artifactId>
<version>2.22.1</version>
</dependency>