육각형 아키텍처에서의 테스트 전략과 아키텍처의 각 요소드를 테스트할 수 있는 테스트 유형
- 도메인 엔티티를 구현할 때는 단위 테스트로 커버하자
- 유스케이스를 구현할 때는 단위 테스트로 커버하자
- 웹 어댑터를 구현할 때는 통합 테스트로 커버하자
- 영속성 어댑터를 구현할 때는 통합 테스트로 커버하자
- 사용자가 취할 수 있는 중요 애플리케이션 경로는 시스템 테스트로 커버하자
시스템 테스트 > 통합 테스트 > 단위 테스트
테스트 피라미드에 따르면 비용이 많이 드는 테스트는 지양하고 비용이 적게 드는 테스트를 많이 만들어야 한다.
하나의 클래스를 인스턴스화하고 해당 클래스의 인터페이스를 통해 기능들을 테스트한다.
만약 테스트 중인 클래스가 다른 클래스에 의존한다면 의존되는 클래스들은 인스터스화하지 않고 테스트동안 필요한 작업들을 흉내 내는 목(mock)으로 대체한다.
연결된 여러 유닛을 인스턴스화하고 시작점이 되는 클래스의 인터페이스로 데이터를 보낸 후 유닛들의 네트워크가 기대한 대로 잘 동작하는지 검증한다.
두 계층 간의 경계를 걸쳐서 테스트할 수 있기 때문에 객체 네트워크가 완전하지 않거나 어떤 시점에는 목을 대상으로 수행해야 하낟.
보통 시스템 테스트에서는 애플리케이션의 UI를 포함하는 엔드투엔드 테스트를 포함한다.
- 하지만 현재 백엔드 아키텍처에 대해서 논의하고 있기 때문에 엔드투엔드 테스트에 대해서 고려하지 않는다.
도메인 엔티티 내 비즈니스 규칙 검증
Mockito 라이브러리를 이용해서 테스트 진행 또는 테스트 더블 활용
@WebMvcTest 활용
@DataJpaTest 활용