Spring Boot Test와 Mock
assertSame()과 assertEquals()
- assertSame은 참조형(객체), assertEquals는 기본형(값)을 비교해야할 때 사용한다.
Mock 관련 어노테이션
- 객체간의 의존성에 관계 없이 테스트를 할 수 있도록 만드는 가짜 객체를 mock이라고 한다.
- @Mock : mock 객체를 만들어 반환해주는 어노테이션
- @MockBean : Bean이 Container에 존재해야하는데 이를 mock으로 설정할 때 사용.
- Stub : 어떤 메소드를 실행할 때는 이렇게 동작한다고 설정하는 것 ( return 값 설정, throw할 예외 설정 등)
- @Spy : Stub 하지 않은 메소드들은 메소드 그대로 사용하는 어노테이션. Stub한 메소드는 설정한대로 실행
- @InjectMocks : @Mock, @MockBean 이나 @Spy 객체를 자신의 멤버 클래스와 일치하면 주입시키는 어노테이션 (의존성 주입)
> 예를 들면 Service에 @InjectMock을 설정하고 Service에 주입되어있는 Repository를 @MockBean 애노테이션으로 mock 객체를 만들면 테스트 실행할 때 Service의 Repository가 mock 객체로 설정된다.
Spring Boot Test 어노테이션
- @SpringBootTest는 전체 빈을 등록해서 테스트한다 전체 응용 프로그램을 로드하여 모든 bean을 주입하기 때문에 속도가 느리다. webEnvironment를 이용해서 톰켓 구동 여부를 설정할 수 있다.
- @WebMvcTest : 스프링 부트의 컨트롤러를 테스트할 때 사용. 테스트할 컨트롤러 클래스를 지정해야한다. MVC 컨트롤러에 관련된 환경구성을 위한 빈만 등록하고 나머지 빈은 mock으로 처리한다.
MockMvc
- 배포하지 않고 스프링 MVC 동작을 재현할 수 있는 클래스
- junit과 spring-test 라이브러리가 필요하다
- MockMvcRequestBuilders로 요청 방식을 지정하고 MockMvcRequestBuilders가 반환하는 MockHttpServletRequestBuilder로 요청정보(파라미터, 컨텐츠 등) 을 설정한다.
- ResultActions 인터페이스가 지원하는 인터페이스로 결과를 검증한다.
Reference
https://mangkyu.tistory.com/145
https://codeofenow.tistory.com/67