[워밍업클럽 4기 백엔드] Day16 미션

Layered Architecture 구조의 레이어별 테스트 작성법

각 레이어별로 어떤 특징이 있고, 어떻게 테스트하면 좋을지 정리한다.

 

Persistence Layer

  • Persistence Layer의 특징

    • DB와 가장 가깝게 통신하며 데이터를 주고받는 레이어이다.

    • 데이터의 CRUD 작업을 담당하는 역할이다.

    • 비즈니스 로직이 포함되지 않는다.

  • Persistence Layer 테스트

    • @DataJpaTest를 사용한다.

       

      • @SpringBootTest는 전체 빈을 다 로딩하지만, @DataJpaTest는 Repository와 관련된 Bean만 로딩하기 때문에 이렇게 빠르고 가볍게 테스트하는 Persistence Layer에서는 @DataJpaTest를 주로 사용한다.

    • save, find, delete 등 데이터에 대한 CRUD가 잘 동작하는지 테스트한다.

    • 데이터를 조회할 때 해당 데이터가 없을 경우(null이나 빈 리스트) 올바르게 동작하는지 테스트한다.

 

 

Business Layer

  • Business Layer의 특징

    • 말그대로 비즈니스 로직을 구현한다.

    • 즉, '데이터를 가지고 어떤 걸 할지'를 구현한다.

    • 트랜잭션이 중요하다.

  • Business Layer 테스트

    • @SpringBootTest를 사용해 전체 빈을 다 로딩하도록 한다.

    • 필요한 의존성을 @Autowired로 주입한다.

    • 복잡한 비즈니스 로직을 테스트한다.

    • 정상 동작은 물론, 예외 케이스도 필요하다면 테스트한다.

    • @Transactional은 테스트 코드에서만 있으면 문제가 발생해도 뒤늦게 발견할 수 있기 때문에 주의해야 한다.

 

 

Presentation Layer

  • Presentation Layer의 특징

    • 가장 앞쪽에서 사용자와 시스템 간의 입출력을 담당한다.

    • 일반적으로 Controller가 담당한다.

    • 비즈니스 로직은 포함하지 않는다.

    • Validation에 대한 책임 분리를 생각하자.

      • 도메인 로직에 해당하는 validation은 Presentation Layer에서 하지 않는다.

  • Presentation Layer 테스트

    • Controller 레이어만 가볍게 테스트하기 위해서 @WebMvcTest를 사용한다.

    • Request Validation에 대한 테스트를 진행한다.

    • Service 계층은 Mocking이 필요하다.

 

 


출처

Practical Testing: 실용적인 테스트 가이드

댓글을 작성해보세요.

채널톡 아이콘