허원철의 개발 블로그

Spring Boot - Test 본문

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을 추가해주면 많은 테스팅 도구를 제공합니다.

- JUnit ─ 자바 App 유닛 테스트 표준
- Spring Test ─ Spring App을 위한 통합 테스트 및 유틸
- AssertJ ─ Fluent API를제공하는 assertion 라이브러리
- Hamcrest ─ JUnit assertion 스타일을 따르는 매체 객체 라이브러리
- Mockito ─ 자바 Mock 프레임워크
- JSONassert ─ JSON을 위한 JUnit assertion 라이브러리
- JsonPath ─ JSON을 위한 XPath

간단하게 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에 해당되는 예상되는 반환처리를 해볼 수 있습니다.

(postman으로 보면 더 편할 같다는.. 생각이 듭니다.)

참고


'web' 카테고리의 다른 글

Spring Boot - Custom Jackson Converter  (415) 2016.12.05
Spring Boot - Cache  (412) 2016.12.05
Spring Boot - AOP  (424) 2016.12.04
Spring Boot - Interceptor  (410) 2016.12.04
Spring Boot - Social (Facebook)  (411) 2016.12.04
Comments