Maven Dependencies
https://mvnrepository.com/artifact/org.junit/junit5-engine/5.0.0-ALPHA
@AssertAll
assertAll()은 모든 검증을 수행한다. 오류가 발생하더라도 검증을 모두 수행하고 오류가 발생한 검증들에 대해 결과를 출력한다.
assertTrue(), assertFalse()... 여러개의 assert문을 작성시 오류가 발생하면 오류 이후의 assert 문이 수행 안되는것과 차이가 있다.
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
@SpringBootTest
public class AssertAllTest {
@Test
void assertAllTest() {
String hello = "Hello";
String world = "World";
assertAll("headingV1",
() -> assertEquals("Hello", hello),
() -> assertEquals("Hello", hello),
() -> {
assertAll("headingV2",
() -> assertEquals("World", world),
() -> assertEquals("World", world)
);
});
}
}
@EnabledOnOs, @DisabledOnOs, @EnabledOnJre, @DisabledOnJre, @EnabledIfSystemProperty, @DisabledIfSystemProperty
@EnabledOnOs : 특정 OS 에서 검증한다.
@DisabledOnOs : 특정 OS 에서는 검증을 하지 않는다.
@EnabledOnJre : 해당 버전에서 검증한다.
@DisabledOnJre : 해당 버전에서는 검증을 하지 않는다.
@EnabledIfSystemProperty : System Property가 있을 경우 검증한다.
@DisabledIfSystemProperty : System Property가 있을 경우 검증을 하지 않는다.
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.*;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.condition.JRE.JAVA_8;
import static org.junit.jupiter.api.condition.OS.*;
@SpringBootTest
public class ConditionTest {
@Test
@EnabledOnOs({MAC, LINUX})
public void enable_Mac_Linux() {
System.out.println("Mac and Linux");
}
@Test
@DisabledOnOs({WINDOWS, MAC})
public void disable_Windows_MAC() {
System.out.println("Windows And Mac");
}
@Test
@EnabledOnJre(JAVA_8)
public void enable_Java8() {
System.out.println("Java 8");
}
@Test
@EnabledIfSystemProperty(named = "os.arch", matches = ".*64.*")
void only64bit() {
}
@Test
@DisabledIfSystemProperty(named = "test", matches = "true")
void onlyTestProperty() {
}
}
Exception 테스트
기존 Exception 테스트는 특정 에러에 대해서만 가능했지만 Junit 5 에서는 특정 에러가 발생 할때 메세지까지 검증이 가능하다.
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
@SpringBootTest
public class ExceptionTest {
@Test
@DisplayName("NullPoint Exception")
void nullPointException() {
Throwable e = assertThrows(NullPointerException.class, () -> {
throw new NullPointerException("Object Null Error");
});
assertEquals("Object Null Error", e.getMessage());
}
}
Nested 테스트
@BeforeAll, @AfterAll
- static 메서드 이어야 한다.
- @Test 메서드 보다 전/후로 실행된다.
import org.junit.jupiter.api.*;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class NestedTest {
@BeforeAll
public static void beforeAll() {
System.out.println("Foo beforeAll");
}
@AfterAll
public static void afterAll() {
System.out.println("Foo afterAll");
}
@BeforeEach
public void beforeEach() {
System.out.println("Foo beforeEach");
}
@AfterEach
public void afterEach() {
System.out.println("Foo afterEach");
}
@Test
public void test() {
System.out.println("Foo test");
}
@Nested
public class Bar {
@BeforeEach
public void beforeEach() {
System.out.println("Bar beforeEach");
}
@AfterEach
public void afterEach() {
System.out.println("Bar afterEach");
}
@Test
public void test() {
System.out.println("Bar Test");
}
}
}
// 실행 결과
Foo beforeEach
Bar beforeEach
Bar Test
Bar afterEach
Foo afterEach
Foo afterAll
@ParameterizedTest
하나의 테스트 메서드로 여러개의 파라미터를 사용하여 테스트가 가능하다.
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class ParameterTest {
@ParameterizedTest
@CsvSource({"1, 2", "3, 4"})
void parameterTest(int i, int j) {
System.out.println("ParameterTest ==> " + i + " :: " + j);
}
}
Timeout Test
테스트 코드의 시간 초과, 시간 준수에 대해 검증이 가능하다.
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import static java.time.Duration.ofMillis;
import static java.time.Duration.ofMinutes;
import static org.junit.jupiter.api.Assertions.assertTimeout;
@SpringBootTest
public class TimeoutTest {
@Test
void timeoutNotExceeded() {
assertTimeout(ofMinutes(2), () -> Thread.sleep(10));
}
@Test
@DisplayName("시간 초과로 테스트가 실패한다.")
void timeoutExceeded() {
assertTimeout(ofMillis(10), () -> Thread.sleep(100));
}
}
'Develop > java,spring' 카테고리의 다른 글
Intellij 단축키 (0) | 2020.11.12 |
---|---|
QueryDsl 설정부터 사용해보기 (0) | 2020.11.12 |
application.properties 설정 목록 (0) | 2020.11.04 |
MSA(Micro Service architecture) (0) | 2020.11.04 |
비동기 (0) | 2020.11.04 |