JUnit5 테스트 실행 방법 - ConsoleLauncher, Gradle
ConsoleLauncher 사용법
JUnit5 를 실행하기 위한 커멘드 라인 툴로, ConsoleLauncher 라고 하는 것이 준비되어 있다. 이 툴에 대한 사용방법을 알아 보도록 하겠다.
Download JAR
이 툴은 jar 파일로 되어 있어서, 사용을 하기 위해서 Maven의 센트럴 리포지토리에서 다운로드 받아 와야 한다.
여기서는 2022-12-11 기준, 최신 버진을 1.9.1를 다운로드 받았다.
테스트 실행 방법
일반적으로 테스트 클래스는 다음 클래스 경로에 있다.
build/classes/java/test
target/test-classes
이 클래스 경로 기준으로 설명하겠다.
테스트 클래스 경로에 모든 테스트 실행
테스트 클래스 경로(build/classes/java/test
)에 있는 모든 클래스를 아래 명령어로 아래와 같이 실행 할 수 있다.
$ java -jar junit-platform-console-standalone-1.9.1.jar \
--classpath build/classes/java/test \
--scan-classpath
--classpath
옵션은 -cp
로 단축 시킬 수도 있다.
$ java -jar junit-platform-console-standalone-1.9.1.jar \
-cp build/classes/java/test \
--scan-classpath
-cp
선택적으로 테스트에 사용되는 종속성(JUnit5 이외)을 클래스 경로에 추가한다.- JUnit5의 클래스들은
junit-platform-console-standalone-1.9.1.jar
에 포한되어 있다.
- JUnit5의 클래스들은
클래스를 지정하여 테스트를 실행
특정 클래스를 지정하여 실행 시킬 수 있다.
$ java -jar junit-platform-console-standalone-1.9.1.jar \
-cp build/classes/java/test \
--select-class com.devkuma.junit5.JUnit5Test
--select-class
옵션은 -c
로 단축 시킬 수도 있다.
$ java -jar junit-platform-console-standalone-1.9.1.jar \
-cp build/classes/java/test \
-c com.devkuma.junit5.JUnit5Test
패키지에 모든 테스트를 실행
지정한 패키지에서 하위 패키지를 포함한 모든 테스트 클래스를 실행한다.
$ java -jar junit-platform-console-standalone-1.9.1.jar \
-cp build/classes/java/test \
--select-package com.devkuma.junit5
패키지에서 모든 테스트를 실행하고, 정규식 패턴을 통해 테스트의 클래스 이름을 필터링
지정한 패키지에서 하위 패키지를 포함하고, 정규식 패턴에 해당되는 모든 테스트 클래스를 실행한다.
$ java -jar junit-platform-console-standalone-1.9.1.jar \
-cp build/classes/java/test \
--select-package com.devkuma.junit5 \
--include-classname='.*Test.*'
테스트 실행 출력
테스트 결과는 콘솔로 출력된다.
$ java -jar junit-platform-console-standalone-1.9.1.jar \
-cp build/classes/java/test \
-c com.devkuma.junit5.JUnit5Test
Thanks for using JUnit! Support its development at https://junit.org/sponsoring
╷
├─ JUnit Jupiter ✔
│ └─ JUnit5Test ✔
│ ├─ success() ✔
│ └─ fail() ✘ expected: <3> but was: <5>
├─ JUnit Vintage ✔
└─ JUnit Platform Suite ✔
Failures (1):
JUnit Jupiter:JUnit5Test:fail()
MethodSource [className = 'com.devkuma.junit5.JUnit5Test', methodName = 'fail', methodParameterTypes = '']
=> org.opentest4j.AssertionFailedError: expected: <3> but was: <5>
org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197)
org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:150)
org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:145)
org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:528)
com.devkuma.junit5.JUnit5Test.fail(JUnit5Test.java:14)
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[...]
Test run finished after 44 ms
[ 4 containers found ]
[ 0 containers skipped ]
[ 4 containers started ]
[ 0 containers aborted ]
[ 4 containers successful ]
[ 0 containers failed ]
[ 2 tests found ]
[ 0 tests skipped ]
[ 2 tests started ]
[ 0 tests aborted ]
[ 1 tests successful ]
[ 1 tests failed ]
커맨드 도움말
여기서 소개한 옵션에 다른 옵션도 많이 준비 되어 있는데, 이는 터미널 명령으로 확인 가능한다.
$ java -jar junit-platform-console-standalone-1.9.1.jar --help
Gradle 에서 테스트 실행
보통을 사용하고 있는 빌드 툴에서 실행하는 경우가 많을 것이다.
Gradle은 4.6부터 JUnit5 실행을 기본적으로 지원하므로 Gradle에서 실행해 보도록 하겠다.
Gradle 설정
Gradle은 JUni4 및 TestNG와 같은 다른 테스트 프레임워크도 지원한다.
JUnit5를 사용하는 경우 JUnit5를 사용한다는 것을 아래와 같이 명시적으로 선언해야 한다.
build.gradle
test {
useJUnitPlatform()
}
테스트 코드 실행
테스트 성공만 있는 경우에는 아래와 같이 나온다.
% gradle test
BUILD SUCCESSFUL in 833ms
3 actionable tasks: 1 executed, 2 up-to-date
테스트 실패가 포함된 경우에는 아래와 같이 나온다.
% ./gradlew test
> Task :test FAILED
JUnit5Test$StaticClass > fail() FAILED
org.opentest4j.AssertionFailedError at JUnit5Test.java:25
JUnit5Test$StaticTest > fail() FAILED
org.opentest4j.AssertionFailedError at JUnit5Test.java:37
JUnit5Test > fail() FAILED
org.opentest4j.AssertionFailedError at JUnit5Test.java:14
6 tests completed, 3 failed
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':test'.
> There were failing tests. See the report at: file:///Users/user/develop/tutorial/java-tutorial/java-junit5-tutorial/build/reports/tests/test/index.html
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 857ms
3 actionable tasks: 1 executed, 2 up-to-date
- 실행된 클래스은 아래와 같다.
JUnit5Test$StaticClass
JUnit5Test$StaticTest
JUnit5Test
- 내부 클래스는
InnerTest
는 기본적인 실행이 안된다.