JUnit5 테스트 실행 방법 - ConsoleLauncher, Gradle

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에 포한되어 있다.

클래스를 지정하여 테스트를 실행

특정 클래스를 지정하여 실행 시킬 수 있다.

$ 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는 기본적인 실행이 안된다.



최종 수정 : 2022-12-11