STUDY/Spring
JUnit5 | @ExtendWith, MockMvc, @TestConstructor
개미606
2021. 5. 25. 10:29
@ExtendWith
- JUnit 4의
@RunWith
가 JUnit 5에서는@ExtendedWith
로 변경되었음 @SpringBootTest
애노테이션에 포함되어 있기 때문에 둘다 명시할 필요는 없음
MockMvc
- Spring MVC 애플리케이션을 테스트 해볼 수 있게 도와줌
- 실제 서버의 실행 없이 요청하고 응답받아볼 수 있음
MockMvc
과 WebApplicaionContext
를 @Autowired
애노테이션을 이용해 의존관계 주입하고, setup()
메서드로 MockMvc
를 초기화 한다.@BeforeEach
애노테이션을 명시함으로써 테스트가 실행되기 전 setup()
메서드가 실행되어 반복적으로 초기화 할 필요가 없다.
@WebMvcTest
public class HelloControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private WebbApplicationContext webApplicationContext;
@BeforeEach
public void setup() throws Exception{
this.mockMvc = MockMvcBuilders
.webAppContextSetup(this.webApplicationContext)
.build();
}
}
TestRestTemplate
@SpringBootTest
의 WebEnvironment설정으로 실제 서버를 동작하게 한 뒤, RestTemplate을 통해 요청, 응답 받을 수 있다.TestRestTemplate
은 스프링에서 제공하는 테스트용 RestTemplate이다. 자동으로 내장 서버와 연결된다.- 필요하다면
RestTemplateBuilder
를 통해 여러 설정을 추가할 수 있다.
MockMvc는 서버 사이드에서 테스트 해보는 것,
RestTemplate(TestRestTemplate)은 클라이언트 사이드에서 테스트 해보는 것 이라고 생각하면 된다.
@TestConstructor
JUnit 5부터는 생성자를 통한 의존관계 주입이 가능해졌다.AutowireMode.ALL
설정을 통해 @Autowired
애노테이션을 명시하지 않고, private final
로 선언된 필드들에 의존관계 주입이 가능하다.
@RequiredArgsConstructor
@TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL)
@SpringBootTest
public class MyTest {
private final HelloService helloService;
@Test
public void 테스트() {
// 테스트 코드 생략
}
}