인프런 백기선님의 더 자바, 애플리케이션을 테스트하는 다양한 방법 강좌를 학습하며 정리한 내용입니다.
Platform: 테스트를 실행해주는 런처 제공. TestEngine API 제공.
Jupiter: TestEngine API 구현체로 JUnit 5를 제공.
Vintage: JUnit 4와 3을 지원하는 TestEngine 구현체.
@Test
테스트를 실행할 메서드를 설정
@BeforeAll / @AfterAll
@Test 어노테이션이 붙은 모든 테스트 메서드의 실행 전, 실행 후 실행
@BeforeEach / @AfterEach
@Test 어노테이션이 붙은 각각의 테스트 메서드의 실행 전, 실행 후 실행
@Disabled
테스트 메서드가 실행되지 않도록 설정
@DisplayName
어떤 테스트인지 테스트 이름을 보다 쉽게 표현할 수 있는 방법을 제공
assertEquals(expected, actual)
실제 값이 기대한 값과 같은지 확인
assertNotNull(actual)
값이 null이 아닌지 확인
assertTrue(boolean)
다음 조건이 참(true)인지 확인
assertAll(executables...)
모든 확인 구문 확인
assertThrows(expectedType, executable)
예외 발생 확인
assertTimeout(duration, executable)
특정 시간 안에 실행이 완료되는 지 확인
특정한 조건을 만족하는 경우에 테스트를 실행하는 방법.
-> RepetitionInfo 타입의 인자를 받을 수 있다.
JUnit은 테스트 메서드 마다 테스트 인스턴스를 새로 만든다.
@TestInstance(Lifecycle.PER_CLASS)
테스트 메서드는 내부적으로 정해진 특정한 순서에 의해 실행되지만 어떻게 그 순서를 정하는지는 의도적으로 정의하지 않는다.(테스트 인스턴스를 테스트 마다 새로 생성하는 것과 같은 이유이다.) 테스트를 실행할 때마다 테스트 메서드는 같은 순서로 실행되지만, JUnit 내부 구현 로직이 언제 바뀔지 알 수 없기 때문에 이 순서에 의존하여 코드를 작성하면 안된다.
하지만, 특정 순서대로 테스트 코드를 실행하고 싶을 때도 있을 것이다.(회원가입 -> 로그인 -> 개인 페이지 -> 닉네임 변경 등의 시나리오 테스트를 할 경우) 이러한 경우 테스트 메서드를 원하는 순서에 따라 실행하도록 @TestInstance(Lifecycle.PER_CLASS)와 함께 @TestMethodOrder()를 사용할 수 있다.
반드시 @TestInstance를 같이 사용해야 하는 것은 아니다. 상태 정보를 공유하면서 순차적인 테스트를 만들기 위해 함께 사용하라는 것.