티스토리 뷰

Test

JUnit5 (2/2)

Jaime.Lee 2019. 11. 29. 16:39
모든 소스는 여기서 확인하실 수 있습니다.

 

지난 포스팅에 이어서 JUnit5에서 추가된 내용을 간략하게 다뤄보려고 합니다.

 

Dependencies

ext {
    junitJupiterVersion = '5.4.2'
    junitPlatformVersion = '1.2.0'
    junitVintageVersion = '5.4.2'
}

dependencies {
    // junit5
    testImplementation "org.junit.platform:junit-platform-runner:${junitPlatformVersion}"
    testImplementation "org.junit.vintage:junit-vintage-engine:${junitVintageVersion}"
    testImplementation "org.junit.jupiter:junit-jupiter-migrationsupport:${junitVintageVersion}"
    testImplementation "org.junit.jupiter:junit-jupiter-engine:${junitJupiterVersion}"
    testImplementation "org.junit.jupiter:junit-jupiter-params:${junitJupiterVersion}"
    testImplementation "org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}"
    
    // lombok
    testImplementation "org.projectlombok:lombok:1.18.10"
    testAnnotationProcessor "org.projectlombok:lombok:1.18.10"
}

Test Suites

여러 테스트 클래스 모음을 같이 테스트할 수 있습니다. @SelectPackages, @SelectClasses 애노테이션을 통해 해당 기능을 제공합니다.

package io.lcalmsky.junit;


import org.junit.platform.runner.JUnitPlatform;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.runner.RunWith;

@RunWith(JUnitPlatform.class)
@SelectPackages("io.lcalmsky.junit") // 해당 패키지의 테스트를 모두 수행
public class IntegrationPackageTests {

}
package io.lcalmsky.junit;

import org.junit.platform.runner.JUnitPlatform;
import org.junit.platform.suite.api.SelectClasses;
import org.junit.runner.RunWith;

@RunWith(JUnitPlatform.class)
@SelectClasses({AfterTests.class, AssertionTests.class, DisplayNameAndDisabledTests.class}) // 명시한 클래스들의 테스트를 수행
public class IntegrationClassTests {

}

Dynamic Tests

동적 테스트 기능으로 런타임시 생성된 테스트 케이스를 선언하고 실행할 수 있습니다. @TestFactory 애노테이션을 사용해 팩토리 메소드로 동적 테스트를 생성합니다.

 

package io.lcalmsky.junit;

import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class TestFactoryTests {

    private List<String> in = new ArrayList<>(Arrays.asList("안녕", "응", "아니"));
    private List<String> out = new ArrayList<>(Arrays.asList("Hello", "Yes", "No"));

    @TestFactory
    public Stream<DynamicTest> translateDynamicTestsFromStream() {
        return in
                .stream()
                .map(word -> DynamicTest.dynamicTest("Test translate " + word, () -> {
                    int id = in.indexOf(word);
                    assertEquals(out.get(id), translate(word));
                }));
    }

    private String translate(String word) {
        if ("안녕".equalsIgnoreCase(word)) {
            return "Hello";
        } else if ("응".equalsIgnoreCase(word)) {
            return "Yes";
        } else if ("아니".equalsIgnoreCase(word)) {
            return "No";
        }
        return "Error";
    }
}
팩토리 메소드는 반드시 Stream, Collection, Iterable 또는 Iterator를 리턴해야합니다.

 

'Test' 카테고리의 다른 글

Mock은 Stub이 아니다(Mocks Aren't Stubs)  (2) 2022.05.11
JUnit5 (1/2)  (0) 2019.11.26
댓글