테스트는 Junit5 에서 진행했고 @RunWith는 Junit5부터는 안써도 된다.
처음 궁금했던 건 아래의 테스트 코드는 오류가 난다는 것이다. 이 오류는 스택오버플로우 질문에서 해결했다.
오류 내용은 아래와 같다.
Error creating bean with name '{경로}' : Unsatisfied dependency expressed through field 'restTemplate'; org.springframework.beans.factory.NoSuchBeanDefinitionException: org.springframework.boot.test.web.client.TestRestTemplate' available: expected at least 1 bean which qualifies as autowire candidate.Dependency annotations: @org.springframework.beans.factory.annotation.Autowired(required=true)
NoSuchBeanDefinitionException
오류 내용을 간추리긴 했는데 요약하면 빈을 생성하지 못했다는 것이다. @Autowired의 기본설정은 required=true 이므로 빈을 찾아서 주입해야 하는데 빈을 생성할 수 없다는 것이다.
그리고 @SpringBootTest 어노테이션에 답이 있는데
@SpringBootTest는 여러 환경의 웹 환경을 만들어서 테스트 할 수 있다. 그 기능으로 실제 정의된 혹은 랜덤의 포트로 웹서버를 띄울 수 있다. 또한 TestRestTemplate 를 열려있는 포트로 자동으로 등록한다.
즉, 열려있는 포트가 없다면 TestRestTemplate를 빈으로 등록할 수 없기 때문에 이러한 오류가 난다.
그래서 랜덤포트를 사용한다는 속성으로 testRestTemplate를 등록할 수 있도록 설정하면 된다.
도움 되었던 글의 원문
If you read the java doc of SpringBootTest annotation, it says that annotation provides below features (not listing all of them here, but only what are relevant to the question.)
- Provides support for different webEnvironment modes, including the ability to start a fully running web server listening on a defined or random port.
- Registers a TestRestTemplate and/or WebTestClient bean for use in web tests that are using a fully running web server listening on a defined or random port.
So @SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT) provides the ability to autowire TestRestTemplate because it starts a fully running web server [as mentioned in @AndyWilkinson' answer as well].
But if you want to autowire MockMvc as well in same TestClass then use @AutoConfigureMockMvc annotation over TestClass.
'Spring' 카테고리의 다른 글
[일지] Category는 삭제할 수 없다고?? (0) | 2020.09.02 |
---|---|
[일지] Static 메서드로 생성하는 객체가 자동으로 save?? (0) | 2020.09.01 |
[후기] 스프링 부트와 AWS로 혼자 구현하는 웹서비스 (0) | 2020.08.29 |
[일지] JPA Auditing 안먹는 이유는? (0) | 2020.08.25 |
[일지] failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. (0) | 2020.08.25 |
댓글