기능 테스트
클라이언트가 요구한 기능이 제대로 작동하는지 확인
통합 테스트
클라이언트 측 툴 없이 개발자가 짜 놓은 로직들이 제대로 작동하는지 확인
슬라이스 테스트
애플리케이션의 특정 계층으로 쪼개어서 하는 테스트
단위 테스트
메서드나 모듈이 올바르게 동작하는지 확인하는 테스트
보통 비즈니스 로직에서 사용하는 클래스의 동작을 테스트 함
단위 테스트를 위한 FIRST 원칙
- Fast(가벼워야 함)
- Independent(독립적이어야 함)
- Repeatable(반복해서 실행할 수 있어야 함)
- Self-validating(자체 검증 결과가 있어야 함)
- Timely(기능 구현 전에 작성되어야 함)
유틸리티 클래스
단위테스트를 위한 헬퍼 클래스, 정적 메서드(static method)로 구성
테스트 케이스의 가독성을 높이는 BDD(Behavior Driven Development)테스트
- Given
준비 과정. 전제 조건 또는 입력 값을 설정- When
동작 대상을 지정. 보통 메서드 호출 형식을 사용- Then
검증(Assertion) 과정. 보통 예상과 결과를 비교하는 형식*Assertion(어써션): ‘예상하는 결과 값이 참(true)이길 바라는 것’
Java의 표준 테스트 프레임워크
Spring Boot Intializr로 생성시 기본 포함
@DisplayName("TestName")
해당 메서드가 콘솔창에 표시되는 이름을 설정
@Test
해당 메서드를 테스트 메서드로 설정
assertEquals(기대값, 실제값)
기대한 값이 나오는가를 확인
assertNotNull(테스트 객체, "실패 메세지")
객체가 null이 아닌지를 테스트
assertThrows(기대한 예외, 테스트 메서드)
기대한 예외가 발생하는가를 확인
다른 타입의 Exception은 fail
기대값의 하위 Exception은 passed 됨으로 주의
assertDoesNotThrow(테스트 메서드)
예외가 발생하지 않음을 기대
@BeforeEach
각 테스트 케이스 메서드 실행시 마다 직전에 실행되는 메서드
@BeforeAll
테스트 케이스 전체실행시 단 한번만 값을 초기화
적용된 메서드는 반드시 static메서드여야 함
참고 @AfterEach, @AfterAll
특정 환경에만 테스트 케이스가 실행
assumeTrue() 피라미터가 true이면 다음 로직을 실행
JUnit 기반 Assertion에서 보편적으로 사용되는 Assertion Framework
다양한 Matcher를 통해 가독성을 높혀준다
assertThat()의 두번째 파라미터에 사용한다
assertThat(actualValue, is(expectedValue));
is()일치
equalTo()동등
greaterThan/greaterThanOrEqualTo()초과/이상
lessThan/lessThanOrEqualTo()미만/이하
not()부정문
ex)assertThat(actualValue, not(equalTo(expectedValue)));
containsString()부분 문자열을 포함
startsWith()특정 문자열로 시작
endsWith()특정 문자열로 끝
hasItems(,)컬렉션이나 배열이 주어진 요소들을 포함
예외 테스트는 기존 assertThrows()를 조합해서 사용하거나 Custom Matcher를 구현해 사용