[테스트 코드] Spring & JPA 기반 테스트 (2)

1
post-thumbnail

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

섹션 6. Spring & JPA 기반 테스트

📌 Presentation Layer

  • 외부 세계의 요청을 가장 먼저 받는 계층
  • 파라미터에 대한 최소한의 검증을 수행한다

📍 Presentation Layer 테스트

  • Mock : 가짜, 대역
  • Mocking : 가짜 객체로 대신하여서 정상 동작을 가정하고 내가 테스트하고자 하는 레이어에만 집중해서 테스트

Spring Framework를 사용하면서 어떤 하나의 객체 혹은 하나의 레이어를 테스트할 때 의존관계를 갖고 있으면 방해가 된다. 이 방해되는 요소들을 가짜로 처리하고 테스트 대상에 집중할 수 있게 한다.

📌 MockMvc

  • 스프링 프레임워크에서 제공하는 테스트 프레임워크
  • Mock(가짜) 객체를 사용해 스프링 MVC 동작을 재현할 수 있는 테스트 프레임 워크

📌 @Transactional(readOnly = true)

  • readOnly = true : 읽기전용
  • CRUD에서 CUD 동작 안함 / only Read
  • JPA : CUD 작업 동작 X ➡ 스냅샷 저장, 변경감지 X ➡ 성능 향상
  • CQRS - Command와 Query 분리

📌 @WebMvcTest

컨트롤러 레이어만 구별해서 테스트하기 위해 컨트롤러와 관련된 빈들만 올려서 테스트 할 수 있는 어노테이션

@WebMvcTest(controllers = ProductController.class)
class ProductControllerTest {
...
}

📌 mockito 라이브러리

스프링부터 스타터 테스트를 쓰면 자동으로 포함이 되어 있다.

import org.springframework.boot.test.mock.mockito.MockBean;

mockedListverify()를 통해 검증할 수 있다.

when().thenReturn()을 통해 mockedList.get(0)을 할 때 "first"를 반환하게 해달라고 mockget에 설정할 수 있다.

📑 mockito 공식 사이트 : https://site.mockito.org/

📍 @MockBean

mockito에서 제공하는 어노테이션.
컨테이너에 mockito로 만든 mock객체를 넣어주는 역할을 한다.
Service는 이미 빈으로 관리되고 있으므로 MockBean에 적용하면 해당 서비스대신 서비스의 목객체를 대신 넣어준다.

ProductService ➡ ProductService의 Mock Object

@WebMvcTest 사용 시 @MockBean이 없으면 서비스를 못 찾는다.

📌 @NotNull vs @NotBlank vs @NotEmpty

  • @NotNull : null만 비허용 / 빈문자열, 공백 허용.
  • @NotEmpty : 빈문자열 비허용 / 공백 허용.
  • @NotBlank : 빈문자열, 공백 비허용

📑 출처

profile
나는 말하는 감자다

0개의 댓글