목차

개요

기초

테스트 이름 표기하기

Assertion

테스트 케이스 테스트 방법
실제 값이 기대한 값과 같은지 확인 assertEquals(expected, actual)
값이 null이 아닌지 확인 assertNotNull(actual)
다음 조건이 참(true)인지 확인 assertTure(boolean)
모든 확인 구문 확인 assertAll(executables…)
예외 발생 확인 assertThrows(expectedType, executable
특정 시간 안에 실행이 완료되는지 확인 assertTimeout(duration, executable)

대안으로 AssertJ, Hemcrest, TGruth라이브러리도 사용 가능

Assumption(조건에 따라 테스트 실행하기)

조건을 만족하면 아래의 테스트를 수행 조건을 만족하지 않으면 바로 종료(테스트를 수행하지 않으므로 성공도 실패도 아닌 Skip 상태임)

assumingThat를 사용하여 조건과 executable을 동시에 사용할 수도 있음

@EnabledOnOS, @DisabledOnOS({OS.MAC, OS.LINUE}), @EnabledOnJre({JRE.JAVA_8, … }), @EnabledIfEnvironmentVariable(named = “”, matches = “”)

Test 태깅, 필터링

$> ./mvnw test -P ci

커스텀 태그

애노테이션을 생성해서 활용하자

테스트 반복하기

매개변수를 넣어서 계속 반복할 수 있다. 하고 싶은 것은 모두 가능할 것으로 판단된다.

테스트 인스턴스

기본 전략은 테스트 마다 인스턴스가 생성됨 ← 테스트간의 의존성을 없애기 위함

@TestInstance(TestInstance.Lifecycle.PER_CLASS) <- 하나의 인스턴스로 진행
@BeforeAll, @AfterAll 메소드가 static일 필요가 없음

테스트 순서

기본 전략은 각 메소드는 독립적으로 구동되어야 하므로, 순서에 크게 신경을 쓰고 있지 않음 유즈케이스 테스트를 하려면 테스트의 순서도 필요함

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@Order(1), @Order(2)... 순서가 같아도 오류는 나지 않음

설정 파일

JUnit5에서 사용 가능

src/test/resources/junit-platform.properties

JUnit5 확장 모델

이전 JUnit4, JUnit3보다 단순해 짐

@RunWith(Runner), TestRule, MehtodRule
Extension  사용법

선언적
@ExtendWith(FindSlowTestExtension.class)
public class ...

코딩으로 구현
@RegisterExtension (static로 정의되어야 됨)
static FindSlowTestExtension

JUnit5 마이그레이션

vintage 라이브러리를 추가해야 됨

Ref

예제