시작하기전 : JUnit 5 (5.5버전) 을 바탕으로 작성
JUnit 5 모듈 구성
Junit 5는 크게 세 개의 요소로 구성되어 있다.
JUnit 플랫폼 | 테스팅 프레임워크를 구동하기 위한 런처와 테스트 엔진을 위한 API를 제공 |
JUnit 주피터((Jupiter) | JUnit 5를 위한 테스트 API와 실행 엔진을 제공 |
JUnit 빈티지(Vintage) | JUnit 3과 4로 작성된 테스트를 JUnit 5 플랫폼에서 실행하기 위한 모듈을 제공한다. |
JUnit 5는 테스트를 위한 API로 주피터 API를 제공한다.
@Test 애노테이션과 테스트 메서드
public class SumTest{
@Test
void sum(){
int result = 2 + 3;
assertEquals(5, result);
}
}
기본구조는 간단하다.
테스트로 사용할 클래스를 만들고 @Test 애노테이션을 메서드에 붙이기만 하면 된다.
@Test 애노테이션을 붙인 메서드는 private이면 안된다.
주요 단언 메서드
Assertions 클래스는 assertEquals()를 포함하여 여러 단언 메서드를 제공한다.
메서드 | 설명 |
assertEquals(expected, actual) | 실제값(actual)이 기대하는 값(expected) 과 같은지 검사 |
assertNotEquals(unexpected, actual) | 실제값(actual)이 특정 값(unexpected) 과 같지 않은지 검사 |
assertSame (Object expected, Object actual) | 두 객체가 동일한 객체인지 검사한다. |
assertNotSame (Object expected, Object actual) | 두 객체가 동일하지 않은 객체인지 검사한다. |
assertTrue(boolean condition) | 값이 true인지 검사한다 |
ssertFalse(boolean condition) | 값이 false인지 검사한다 |
assertNull(Object actual) | 값이 null인지 검사한다 |
assertNotNull(Object actual) | 값이 null이 아닌지 검사한다. |
fail() | 테스트를 실패 처리한다 |
주요타입별로 assertEquals() 메서드가 존재한다. (int, Long, Object 등등)
assertEquals()메서드를 사용할 때 주의점은 첫번째 인자가 기대하는 값이고 두번째 인자가 검사하는 값이라는 것이다.
fail() 메서드는 테스트에 실패했음을 알리고 싶을 때 사용한다.
예를들어 ID와 암호로 전달 받은 파라미터값이 null이면 예외가 발생하도록 인증기능을 구현했을때
테스트 코드는 ID와 암호로 null을 전달했는데 익셉션이 발생하지 않으면 테스트에 실패 했다고 볼 수 있다.
이럴때 fail을 사용한다
try{
AuthService authService = new AuthService();
authService.authenticate(null, null);
fail();
}catch(IllegaArgumentException){
}
익셉션 발생 유무가 검증 대상이라면 fail() 메서드를 사용하는것보다
익셉션 발생 유무 검사 메서드를 사용하는것이 더 명시적이다.
메서드 | 설명 |
assertThrows(Class<T> expectedType, Executable executable) | executable을 실행한 결과로 지정한 타입의 익셉션이 발생하는지 검사 |
assertDoesNotThrows(Executable executable) | executable을 실행한결과로 익셉션이 발생하지 않는지 검 |
테스트 라이프사이클
@BeforeEach 애노테이션과 @AfterEach 애노테이션
JUnit 코드 실행 순서
1. 테스트 메서드를 포함한 객체 생성
2. (존재하면) @BeforeEach 애노테이션이 붙은 메서드 실행
3. @Test 애노테이션이 붙은 메서드 실행
4. (존재하며) @AfterEach 애노테이션이 붙은 메서드 실행
각각 테스트를 위한 준비 작업 이 필요할때와 테스트실행후 정리할것이 필요할때 사용한다.
(예시 : 테스트에서 사용할 임시파일 생성, 테스트후 임시파일 삭제)
한 클래스에서 모든 테스트 메서드가 실행되기전이나 실행한뒤에 특정 작업을 수행해야 한다면
@BeforeAll 이나 @AfterAll 애노테이션을 사용하면 된다.
테스트 메서드 간 실행 순서 의존과 필드 공유하지 않기
각 테스트 메서든는 서로 독립적으로 동작해야한다.
한 테스트 메서드의 결과에 따라 다른 테스트 메서드의 실행 결과가 달라지면 안 된다.
@DisplayName, @Disabled
@DisplayName : 메서드 이름만으로 테스트 내용을 설명하기 부족할때 사용해준다.
@Disabled : 특정 테스트를 실행하고 싶지 않을때 사용한다.
'책 리뷰 > 테스트 주도 개발 시작하기' 카테고리의 다른 글
Chapter 7 : 대역 (0) | 2024.12.03 |
---|---|
Chapter 6 : 테스트 코드의 구성 (0) | 2024.12.01 |
Chapter 4 : TDD·기능 명세·설계 (0) | 2024.11.30 |
Chapter 3 : 테스트 코드 작성 순서 (0) | 2024.11.25 |
Chapter 2 : TDD 시작 (1) | 2024.11.25 |