테스트 주도 개발에서 사용하지만, 코드의 유지 보수 및 운영 환경에서의 에러를 미리 방지 하기 위해서 단위 별로 검증 하는 테스트 프레임워크
단위테스트
작성한 코드가 기대하는 대로 동작을 하는지 검증하는 절차
Java 기반의 단위 테스트를 위한 프레임 워크, Annotation 기반으로 테스트를 지원하며, Assert를 통하여 예상, 실제를 통해 검증
@ SpringBootTest
등록된 모든 Bean을 올림
@ WebMvcTest(Calculator.class)
필요한 Bean만 올림(Calculator 클래스만)
@ WebAppConfiguration
Controller 및 Web 환경에 사용되는 빈을 자동으로 생성하여 등록
@WebMvcTest(CalculatorApiController.class)
@AutoConfigureWebMvc
@Import({Calculator.class, DollarCalculator.class})
public class CalculatorApiControllerTest(){
@MockBean
private MarketApi marketApi;
@Autowired
private MockMvc mockMvc;
@BeforeEach
public void init(){
Mockito.when(marketApi.connect()).thenReturn(3000);
}
@Test
public void sumTest() throws Exception{
// http://localhost:8080/api/sum
mockMvc.perform(
MockMvcRequestBuilders.get("http://localhost:8080/api/sum")
.queryparam("x", "10")
.queryparam("y", "10")
).andExpect(
MockMvcResultMatchers.status().isOk()
).andExpect(
MockMvcResultMathcers.content().string("60000")
).andDo(MockMvcResultHandlers.print());
}
}
웹 어플리케이션을 애플리케이션 서버에 배포하지 않고 테스트용 MVC 환경을 만들어 요청 및 전송, 응답기능을 제공해주는 유틸리티 클래스
👉 컨트롤러 테스를 하고싶을 때 실제 서버에 구현한 애플리케이션을 올리지 않고(서블릿 컨테이너 사용X) 테스트용으로 시물레이션하여 MVC가 되도록 도와주는 클래스
가짜 객체라고 불리며, 검증하기 위해 사용되는 객체
Mock 객체를 선언할 때 쓰이는 어노테이션
@Test
public void minusTest() throws Exception{
Req req = new Req();
req.setX(10);
req.setY(10);
String json = new ObjectMapper().writeValueAsString(req); //json으로 변환
mockMvc.perform(
MockMvcRequestBuilders.post("http://localhost:8080/api/minus")
.contentType(MediaType.APPLICATION_JSON)
.content(json)
).andExpect(
MockMvcResultMatchers.status().isOk()
).andExpect(
MockMvcResultMathcers.jsonPath("$.result").value("0")
).andExpect(
MockMvcResultMathcers.jsonPath("$.result.resultCode").value("OK") //json 데이터 내부의 객체 데이터 지정
).andDo(MockMvcResultHandlers.print());
}
Java 코드의 코드 커버리지를 체크하는 라이브러리(ex. 테스트가 어디까지 작성되어있나)
결과를 html, xml, csv로 확인이 가능
토이 프로젝트 위주의 1인 개발만 주로 해왔던 나는 일일이 TDD를 하는 것이 훨쒼 귀찮았다. 실행시켜 브라우저로 확인해보면서 디버깅하는게 편하지만, 실무의 대규모 프로젝트에 대비하기 위해 토이 프로젝트에서부터 TDD에 익숙해지는 것이 필요하다고 생각했다.