2017년 10월에 공개된 자바 개발자의 93%가 사용하는 단위 테스트 프레임워크입니다.
이전에는 JUnit4가 기본으로 제공되었지만, SpringBoot 2.2 버전부터는 Junit5가 기본으로 제공됩니다.
JUnit4에서 JUnit5로 넘어오면서
import org.junit.*;
->import org.junit.jupiter.api.*;
로 패키지명이 변경되었습니다.
스프링부트로 프로젝트를 생성하면 다음 의존성이 자동으로 포함되어 있습니다.
따라서 아무 것도 설정하지 않아도 테스트코드를 작성할 수 있습니다.
build.gradle
testImplementation 'org.springframework.boot:spring-boot-starter-test'
단축키로 간단하게 테스트코드를 추가하는 법
테스트하고 싶은 클래스 명을 드래그하고 다음 단축키를 입력하면 쉽게 테스트코드를 추가할 수 있습니다.
Ctrl + Shift + T
@Test
해당 메서드를 테스트 메서드로 지정합니다. void 반환 형식을 가져야합니다.
@DisplayName("xxx")
해당 테스트 메서드에 이름을 지정할 수 있습니다.
@Disabled
해당 테스트 메서드를 비활성화 시킵니다. (테스트에 포함하지 않습니다.)
@Timeout(x) // 초 단위
해당 테스트 메서드가 지정된 시간 내에 완료되지 않으면 실패합니다.
@ParameterizedTest
여러 인수로 테스트를 진행할 수 있습니다.
@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void test(int n) {
assertTrue(n > 0);
}
@BeforeAll
모든 테스트가 실행되기 전에 한 번만 실행됩니다. 반드시 'static'메서드여야 합니다.
@AfterAll
모든 테스트가 실행된 후에 한 번만 실행됩니다. 반드시 'static'메서드여야 합니다.
@BeforeEach
각각의 테스트 메서드가 실행되기 전에 한 번씩 실행됩니다.
@AfterEach
각각의 테스트 메서드가 실행된 후에 한 번씩 실행됩니다.
assertAll(executables);
매개변수로 받는 모든 검증 함수를 한 번에 실행합니다.
오류가 나도 끝까지 실행한 뒤 한 번에 모아서 출력해줍니다.
assertAll(
() -> assertEquals(1, 1),
() -> assertEquals(2, 2),
() -> assertEquals(3, 3),
);
assertEquals(expected, actual);
예상한 값 expected와 실제 값 actual을 비교하고 두 값이 동일한 지 확인합니다.
assertNotEquals(unexpected, actual);
예상치 않은 값 unexpected와 실제 값 actual을 비교하고 두 값이 서로 다른 지 확인합니다.
assertTrue(boolean condition);
조건 condition이 true인지 확인합니다.
assertFalse(boolean condition);
조건 condition이 false인지 확인합니다.
assertNotNull(Object object);
주어진 객체 object가 null이 아닌지 확인합니다.
assertNull(Object object);
주어진 객체 object가 null인지 확인합니다.
assertThrows(expectedExceptionType, executable);
예외를 발생시키는 코드 블록 executable을 실행하고, 예상한 예외 유형 expectedExceptionType이 발생하는 지 확인합니다.
assertThrows(IllegalArgumentException.class, () -> {
throw new IllegalArgumentException("Exception message");
}); // 해당 람다문에서 예외가 터져야 성공.
assertThat(String str, containsString(String subStr));
str이 해당 subStr 문자열을 포함하는지 확인합니다.
테스트코드를 작성하는 방법은 정답이 없기 때문에 많이 작성해 보는 것이 정답인 것 같습니다.
이후 추가되는 내용이 있다면 꾸준히 수정하도록 하겠습니다.