web
Spring Boot - Test
허원철
2016. 12. 5. 08:17
이번 글은 spring boot 에 Test에 대한 글 입니다.
How..?
① Gradle 설정
dependencies {
compile('org.projectlombok:lombok')
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
② 종류
spring boot에서는 Gradle에 testCompile을 추가해주면 많은 테스팅 도구를 제공합니다.
간단하게 java에서 사용될 수 있는 앞 포스팅(Java - JUnit & AssertJ)에서 해봤습니다. 오늘은 SpringTest, Assertj, Mockito를 이용하여 테스트 를 해보려고 합니다.
③ Test
- 테스트 이전에 간단하게 controller, vo, service 를 추가해줍니다.(Test를 위해서...ㅎ)
[Controller]
[Vo]
[Service]
- SpringTest 에서는 TestRestTemplete 라는 것을 제공합니다. 이는 url를 이용하여 반환 값을 테스트할 수 있습니다.
import static org.assertj.core.api.Assertions.*;
// 중략 ..
@Autowired
private TestRestTemplate restTemplate;
// 중략 ..
@Test
public void test() {
String result = restTemplate.getForObject("/test?flag=0", String.class);
assertThat(result)
.isEqualTo("Spring Boot Service Test");
}
여기서 TestRestTemplete 는 getForObject 와 getForEntity 를 제공하는데 getForObject는 객체로 반환하고, getForEntity는 Http ResponseEntity 로 반환 합니다.
- @MockBean을 이용하면 ApplicationContext 안에 Mockito mock인 bean을 사용할 수 있습니다.
import static org.assertj.core.api.Assertions.*;
import static org.mockito.BDDMockito.*;
// 중략 ..
@MockBean
private BasicService service;
// 중략 ..
@Test
public void mockTest() throws Exception {
given(service.test(0))
.willReturn("Spring Boot Service Test");
assertThat(service.test(0))
.isEqualTo("Spring Boot Service Test");
//given(service.test(1))
// .willReturn("Spring Boot Service Test");
}
given.. 과 assertThat... 은 동일한 작업입니다.
- @WebMvcTest를 이용하면 사용자가 사용할 수 있는 예상대로 작동됩니다.
@RunWith(SpringRunner.class)
@WebMvcTest(BasicController.class)
public class MockMvcTest {
@Autowired
private MockMvc mvc;
@MockBean
private BasicService service;
@Test
public void test() throws Exception {
JSONObject json = new JSONObject();
json.put("name", "wonchul");
json.put("type", 0);
given(service.jsonTest())
.willReturn(new TestVo("wonchul", 0));
mvc.perform(get("/jsonTest")
.accept(MediaType.APPLICATION_JSON_UTF8))
.andExpect(status().isOk())
.andExpect(content().json(json.toString()));
}
}
mvc.perform 을 이용하여 url에 해당되는 예상되는 반환처리를 해볼 수 있습니다.
참고