블랙박스 테스트 : 내부의 구조 및 동작 원리를 모르는 블랙박스와 같은 상태(서비스의 사용자 입장)에서 동작을 검사하는 테스트 방법
개발자 테스트 : 개발자가 작성한 코드를 검증해 주는 테스트 코드를 직접 작성하는 방법
단위 테스트
// 예외처리 example
// when
Exception exception = assertThrows(IllegalArgumentException.class, () -> {
new Product(requestDto, userId);
});
// then
assertEquals("상품 최저가가 0 이하입니다.", exception.getMessage());
기존의 순서인
설계 -> 개발 -> 테스트 (-> 설계 수정)
의 순서를
설계 -> 테스트 (->설계 수정) -> 개발
로 변경하여 개발하는 방법
즉, 개발을 먼저하기 전에 테스트 코드를 만든 후 테스트 코드를 통과할 수 있도록 개발하는 방식이다.
단위 테스트에서 각 테스트 케이스는 서로 분리되는 것이 이상적이기 때문에 가짜 객체를 생성하여 사용한다.
개발자가 일일이 Mock object를 구현할 수 없기 때문에 Mockito를 사용하여 단위 테스트를 만들고 함수를 테스트 시나리오 별로 설정한다.
예시
@Mock 어노테이션을 붙여 해당 객체가 Mock object 임을 명시한다.
when, thenReturn 메소드를 활용해 시나리오를 설정한다.
@ExtendWith(MockitoExtension.class)
class ProductServiceTest {
@Mock
ProductRepository productRepository;
// 생략 ...
when(productRepository.findById(productId))
.thenReturn(Optional.of(product));
}
모듈 간에 상호 작용 검증을 못하는 단위 테스트의 한계를 극복하기 위해 통합 테스트를 실행
두 개 이상의 모듈이 연결된 상태에서 테스트하며, 모듈 간의 연결에서 발생하는 에러를 검증한다.