클린 아키텍처, 도메인 주도 설계(DDD), 헥사고날 아키텍처를 따르는 시스템에서 테스트를 작성할 때, 다음과 같은 방식과 전략을 사용하는 것이 권장됩니다. 이러한 아키텍처는 코드의 테스트 가능성을 높이는 데 중점을 두고 있기 때문에, 올바른 테스트 전략을 수립하면 시스템의 안정성과 유지보수성을 크게 향상시킬 수 있습니다.

테스트 전략

  1. 단위 테스트(Unit Test)
  2. 통합 테스트(Integration Test)
  3. 엔드 투 엔드 테스트(End-to-End Test)
  4. 기능 테스트(Functional Test)
  5. 컨트롤러 테스트

테스트 예시

단위 테스트 예시 (도메인 서비스)

class DomainOrderServiceTest {

    private OrderRepository orderRepository;
    private DomainOrderService tested;

    @BeforeEach
    void setUp() {
        orderRepository = mock(OrderRepository.class);
        tested = new DomainOrderService(orderRepository);
    }

    @Test
    void shouldCreateOrder_thenSaveIt() {
        final Product product = new Product(UUID.randomUUID(), BigDecimal.TEN, "productName");

        final UUID id = tested.createOrder(product);

        verify(orderRepository).save(any(Order.class));
        assertNotNull(id);
    }
}

통합 테스트 예시 (어댑터)

@SpringBootTest
class OrderRepositoryIntegrationTest {

    @Autowired
    private OrderRepository orderRepository;

    @Test
    void shouldSaveAndRetrieveOrder() {
        Order order = new Order(UUID.randomUUID(), new Product(...));
        orderRepository.save(order);

        Optional<Order> retrievedOrder = orderRepository.findById(order.getId());
        assertTrue(retrievedOrder.isPresent());
    }
}

결론

이러한 테스트 전략을 사용하면 시스템의 다양한 계층에서 발생할 수 있는 문제를 조기에 발견하고 해결할 수 있습니다. 클린 아키텍처와 헥사고날 아키텍처를 기반으로 한 테스트는 코드의 유지보수성을 높이고, 시스템이 변화하는 요구사항에 잘 대응할 수 있도록 합니다. 이를 통해 전체 시스템의 신뢰성과 품질을 보장할 수 있습니다.

2. 참고자료


https://threedots.tech/post/ddd-cqrs-clean-architecture-combined/