JUnit5
JUnit5는 JUnit Platform, JUnit Jupiter, JUnit Vintage 모듈로 구성된다.
JUnit Platform | JVM 기반 테스팅 프레임워크 실행을 위한 기반 모듈. 플랫폼에서 실행되는 테스트 프레임워크 개발을 위한 TestEngine API를 정의(인터페이스). JUnit4 기반 환경의 플랫폼에서 TestEngine을 실행하기 위한 JUnit4 기반 Runner도 제공. |
JUnit Jupiter | JUnit 5 버전에서 테스트 코드를 작성하기 위한 프로그래밍 모델, 확장 모델을 지원하는 모듈. 테스트 작성, 확장을 위한 JUnit Jupiter API(junit-jupiter-api)모듈과 테스트 실행을 위한 TestEngine 구현(junit-jupiter-engine) 모듈이 분리되어 있다. 이는 5.4 버전부터 junit-jupiter artifact에서 함께 제공하게 변경되어 의존성 관리를 더 간편하게 할 수 있게 되었다. |
JUnit Vintage | JUnit 3, JUnit 4 버전으로 작성된 테스트 코드 실행 시 사용되는 모듈 |
JUnit4와의 차이점
구분 | JUnit4 | JUnit5 |
Architecture | 단일 jar | 3개의 하위 프로젝트 |
JDK 버전 | Java5 이상 | Java8 이상 |
이 외에 어노테이션 이름 변경, 기능 추가.
어노테이션
@Test : 해당 메서드가 테스트 메서드임을 명시함.
@Test
void test() {
// ...
}
@ParameterizedTest : 매개변수가 있는 테스트 메서드임을 명시함.
@ParameterizedTest
@ValueSource(strings = { "gildong" })
void test(String name) {
// ...
}
@RepeatedTest : 반복되는 테스트임을 명시함.
@RepeatedTest(3)
void test() {
// ...
}
@TestFactory : 동적 테스트임을 명시함. 런타임에 생성되는 동적테스트. 그 자체가 테스트라기보다는 테스트 케이스를 위한 팩토리.
@TestFactory
Collection<DynamicTest> dynamicTestsFromCollection() {
return Arrays.asList(dynamicTest("1st dynamic test", () -> assertEquals(6, 3 * 2)),
dynamicTest("2nd dynamic test", () -> assertEquals(4, 2 * 2)));
}
참고: junit.org/junit5/docs/current/user-guide/#writing-tests-dynamic-tests
@TestTemplate : 여러번 호출할 수 있게 설계된 테스트 템플릿.
@TestMethodOrder : 테스트 메서드 실행 순서 명시.
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class HelloJavaTest {
@Test
@Order(2)
void test2() {
System.out.println("2");
}
@Test
@Order(1)
void test1() {
System.out.println("1");
}
}
@TestInstance : 테스트 인스턴스 생명주기를 명시.
@DisplayName : 테스트 클래스나 메서드에 사용자 지정 표기 이름을 명시.
@DisplayNameGeneration : 테스트 클래스에 사용자 지정 표기 이름을 명시.
Standard, Simple, ReplaceUnderScores, IndicativeSentences
import org.junit.jupiter.api.DisplayNameGeneration;
import org.junit.jupiter.api.DisplayNameGenerator;
import org.junit.jupiter.api.Test;
@DisplayNameGeneration(DisplayNameGenerator.IndicativeSentences.class)
class HelloJavaTest {
@Test
void aTest() {
}
}
@BeforeAll : 클래스에 있는 모든 테스트 전에 한 번 실행. static 함수로 생성.
@AfterAll : 클래스에 있는 모든 테스트 후에 한 번 실행. static 함수로 생성.
@BeforeEach : 각 테스트 실행 전에 한 번씩 실행
@AfterEach : 각 테스트 실행 후에 한 번씩 실행
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class HelloJavaTest {
@BeforeAll
static void beforeAll() {
System.out.println("beforeAll");
}
@AfterAll
static void afterAll() {
System.out.println("afterAll");
}
@BeforeEach
void beforeEach() {
System.out.println("beforeEach");
}
@AfterEach
void afterEach() {
System.out.println("afterEach");
}
@Test
void test1() {
System.out.println("test1");
}
@Test
void test2() {
System.out.println("test2");
}
@Test
void test3() {
System.out.println("test3");
}
}
@Nested : 중첩클래스
@Tag : 클래스나 메서드 수준의 테스트 필터링을 위함.
@Disabled : 테스트 비활성화
@Timeout : 실행시간이 명시한시간보다 초과한다면 테스트 실패.
@ExtendWith : 확장을 선언적으로 등록하는데 사용.
@RegisterExtension : 필드를 통해 프로그래밍 방식으로 확장을 등록하는데 사용.
@TempDir : 임시 디렉토리 제공 시 사용.
검증
assertEquals(expect, actual) : 같은지 검증
assertTrue(actual) : true인지 검증
assertFalse(actual) : false인지 검증
assertNull(actual) : null인지 검증
assertNotNull(actual) : null이 아닌지 검증
assertArrayEquals(expect, actual) : 배열 같은지 검증
참고
howtodoinjava.com/junit5/junit-5-vs-junit-4/
www.javaguides.net/2018/07/junit-5-annotations-with-example.html
VS Code Java 개발환경 설정
참고 : Getting Started with Java in VS Code
vs code extension 설치하기
- Language Support for Java(TM) by Red Hat
Hello.java 파일을 만들면
오른쪽 아래와 같은 에러가 발생한다.
java extension을 실행하려면 Java 11 이상의 버전이 필요하다. 최신버전의 JDK를 설치해줘라. 넌 아직 이전 버전의 JDK를 쓰고 있다. java.configuration.runtimes 확인해라.
왼쪽에 OpenJDK 11을 선택 후 다운로드한다.
File > Preferences > Settings
java.configuration.runtimes 검색. Edit in settings.json 클릭
위와 같이 설치한 jdk 11 경로를 추가한다.
name은 JavaSE-xx 로 해줘야 한다. xx에는 설치한 jdk 버전을 적는다.
public class Hello {
public static void main(String[] args) {
System.out.println("hi");
}
}
java 파일을 위와 같이 만들고 Ctrl + F5로 디버깅하면
제대로 실행되는걸 확인할 수 있다.
InterlliJ JUnit5 테스트환경
Create New Project
Gradle > Java Next.
프로젝트명 작성 후 생성.
mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter
gradle 의존성 정보 확인.
버전은 일단은 최신버전! 5.7.0.
// build.gradle
dependencies {
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter', version: '5.7.0'
}
test {
useJUnitPlatform()
}
build.gradle 갱신
public class HelloJava {
public String getName(String name) {
return name;
}
}
입력 문자열을 그대로 리턴하는 getName 함수를 생성.
작성한 함수 위에서 맥 기준 cmd + Shift + T를 누르면 테스트 생성이 가능하다.
Create New Test... 클릭(엔터).
Testing library를 JUnit5로 선택하고 OK.
HelloJavaTest 파일이 자동으로 생성된다.
테스트를 작성한 뒤 왼쪽에 있는 재생버튼을 누르면 해당 테스트가 실행된다.
vs code JUnit5 테스트 환경 설정
vscode extension - Gradle Tasks
$ gradle init --type java-application
테스트를 위한 자바 어플리케이션을 gradle init 명령어로 생성한다.
기타 설정은 모두 디폴트로.
// build.gradle
dependencies {
// ...
// Use JUnit test framework
testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.7.0")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.0")
testRuntimeOnly("org.junit.vintage:junit-vintage-engine:5.7.0")
}
build.gradle 파일에서 dependencies에 있는 JUnit 버전을 5.7로 변경한다.
생성된 파일들 중 자동으로 생성된 테스트를 한 번 돌려보자.
src/test/java/HelloJUnit/AppTest.java를 연다.
testAppHasAGreeting 위에 있는 Run Test를 클릭하면 테스트가 돈다.
그리고 V 표를 클릭하면 테스트 결과 리포트를 확인할 수 있다.
왼쪽 아래에서 실패, 성공한 테스트들 수도 확인할 수 있다.
'JAVA' 카테고리의 다른 글
[Java] 이진검색트리(BST) 구현 (0) | 2020.12.19 |
---|---|
[Java] 클래스, 객체 (0) | 2020.12.19 |
[Java] 연결리스트(Linked List), Stack, Queue 구현 (0) | 2020.12.12 |
[Java] Github API 통신 (0) | 2020.12.11 |
[Java] 선택문, 반복문 (0) | 2020.12.10 |
댓글