[Spring] JUnit5 정리

장성준·2024년 2월 2일
1

Spring

목록 보기
4/5
post-thumbnail

JUnit5

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 문자열을 포함하는지 확인합니다.

Given-When-Then

  • Given: 테스트를 위한 사전 준비
  • When: 테스트를 진행하는 행위
  • Then: 테스트에 대한 결과 검증

마무리

테스트코드를 작성하는 방법은 정답이 없기 때문에 많이 작성해 보는 것이 정답인 것 같습니다.

이후 추가되는 내용이 있다면 꾸준히 수정하도록 하겠습니다.

profile
Backend Engineer

0개의 댓글