아래 테스트를 진행하려는데 이런 에러들이 났다..
@ExtendWith(SpringExtension.class)
@WebMvcTest
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void helloDto_리턴된다() throws Exception {
}
}
Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
이 에러는 디렉토리가 구조가 맞지않아 생기는 에러이다.
- 테스트 하려는 컨트롤러와 같은 패키지에 테스트 클래스를 위치하면 해결된다.
그런데 나는 같은 위치였어도 계속해서 같은 에러가 났다.
또 다른 해결법은 에러 로그가 하라는대로 하면된다.
- @SpringBootTest(classes=...) 로 컨트롤러 클래스 이름을 명시해주면 된다.
[예시] @SpringBootTest(classes = HelloController.class)
2번 방법으로 @SpringBootTest(classes = HelloController.class)을 명시해주었다...
앞선 포스팅을 참조하면 알겠지만, @SpringBootTest 을 사용하면 @ExtendWith(SpringExtension.class)/
@WebMvcTest 와 중첩되기때문에 모두 지워진다.
따라서 선언한 MockMvc 에서 다음과 에러가 발생한다.
@SpringBootTest에서 MockMvc 를 사용하기 위해서는 @AutoConfigureMockMvc 사용해주어야 한다.
@AutoConfigureMockMvc는 @WebMvcTest와 비슷하게 사용할 수 있는 어노테이션이다.
@SpringBootTest에는 웹 애플리케이션 테스트를 지원하는 webEnvironment 속성이 있다. 이 속성을 생략하면 기본값으로 WebEnvironment.MOCK이 설정되어 있는데, 이 설정에 의해서 서블릿 컨테이너가 모킹된다.
@SpringBootTest(webEnvironment=WebEnvironment.MOCK) 설정으로 모킹한 객체를 의존성 주입받으려면 @AutoCOnfigureMockMvc를 클래스 위에 추가 해야한다.
하지만 여기까지 와도 어째서인지 추가적인 에러가 발생했다. . .
@EnableWebMvc
스프링이 자동으로 제공하는 웹과 관련된 최신 전략 빈들을 설정해주는 어노테이션이다. 테스트 하고자하는 컨트롤러(HelloController) 에 적어주니까 정상적으로 동작했다!
추가로 이 에러는 @Getter 가 없을때 자주 발생한다고 한다. 혹시라도 나의 해결법이 도움이 되지 않았다면 참고해도 좋을 것 같다.
하지만 여기까지 와도 왠지 찝찝했다.. 자동화는 좋지만 원리를 모르고 지나치는 느낌이었다.
그래서 다시 한번 코드를 둘러봤고, 본질적인 문제를 해결할 수 있었다..
이유는 바보같게도 Controller 가 위치한 패키지에 오타가 있었다....
이틀동안 못 보고 돌고 돌아 여러 방법을 만났지만 오타를 수정하면 되는 간단한(?) 문제였다.
혹시 이런 문제를 만났다면 잠시 눈을 쉬게하고 오타를 먼저 찾는 전략도 좋을 것 같다.
정말 테스트 코드 에러 고치는게 제일 힘든 일 같다...
결론적으로 아래 코드는 MVC 테스트를 진행하는데 문제가 없다.
혹시 이 코드에서 문제가 발생한다면 다른 부분에 문제가 있을 확률이 높다는 것을 알아주었으면 한다.
@ExtendWith(SpringExtension.class)
@WebMvcTest
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void helloDto_리턴된다() throws Exception {
}
}
출처 및 인용
[SpringBoot] Test(2) MockMvc를 이용해서 테스트하기(@WebMvcTest, @AutoConfigureMockMvc)
[Spring] 설정 자동화와 설정의 변경, @EnableWebMvc와 WebMvcConfigurer