Mock 빈 오류에 관해서
그동안 혼자 공부한 것들을 토대로 프로젝트를 하나 해보려고 한다.
나름 공부한다고 공부를 했는데 HelloWorld 구현하는데 컨트롤러를 만들어두고 테스트 코드를 내의지대로 처음 작성해봤다.
MockMvc 클래스를 사용하여 Mock Bean을 주입받으려고 했더니 빈이 등록되지 않았다는 오류를 받았다.
일단 오류에는 두가지가 있었다.@SpringBootTest
어노테이션을 사용할때 @WebMvcTest
도 같이 사용해서 MockBean을 주입받는줄 알고 바로 넣었는데 두 Mock객체가 공유되어있는 객체가 아니고 서로 다른 객체이다. 그래서 두개의 빈이 충돌이 발생한다.
여기서 해결책은 두가지였다.
@SpringBootTest
와@AutoConfigurationMockMvc
를 사용한 후 MockMvc의@Autowired
를 제거 하는 방법@ExtendWith
,@WebMvcTest
와@Autowired
를 같이 사용하는 방법
이렇게 두가지가 있었다.
먼저 @SpringBootTest
의 경우 일반적인 테스트로 슬라이싱을 사용하지 않기 때문에 전체 응용 프로그램 Context를 시작한다. 때문에 전체 응용 프로그램을 불러서 모든 bean을 주입하기 때문에 속도가 느리다고 한다.
@WebMvcTest
의 경우는 뒤에 ()를 사용해 특정 레이어를 테스트하고 모의 객체를 사용하기 때문에 필요한 bean을 직접 세팅해줘야 하는 단점이 있지만, 가볍고 빠르게 테스트 할 수 있다.
위의 두가지중 아래의 방법에서는 같이 @AutoConfigurationMockMvc
를 사용이 가능하다.
가짜 객체인 Mock을 사용할 때 bean 주입하는데에 있어서 이것을 생각하고 주입해주도록 하자.
'Spring' 카테고리의 다른 글
Spring Data JPA (0) | 2022.08.06 |
---|---|
Spring -> Spring Boot 마이그레이션 (0) | 2022.08.05 |
[Spring] Spring Security (0) | 2022.08.03 |
의존성 주입 어노테이션 정리 (0) | 2022.08.03 |