패캠스프링/part3._스프링입문(part3)
ch8 JUnit으로 테스트하기
hippo0207
2022. 8. 9. 21:12
1. JUnit이란
1.0 기본적으로 java에서 test하는방법 (계산기 만들기)
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
public class DollarCalculatorTest {
@Test
public void testHello(){
System.out.println("hello");
}
@Test
public void dollar(){
MarketApi marketApi = new MarketApi();
DollarCalculator dollarCalculator = new DollarCalculator(marketApi);
dollarCalculator.init();
Carculator carculator = new Carculator(dollarCalculator);
System.out.println(carculator.sum(1,2));
Assertions.assertEquals(22000, carculator.sum(10, 10));
}
}
1.1 mocking
: 내가 특정개체가 메소드로 호출됐을때 원하는값 리턴가능
- @ExtendWith(MockitoExtension.class)
- @Mock @BeforeEach
@ExtendWith(MockitoExtension.class) << << <<
public class DollarCalculatorTest {
@Mock << <<
public MarketApi marketApi;
@BeforeEach // test실행이전에 << <<
public void init(){
Mockito.lenient().when(marketApi.connect()).thenReturn(3000); << <<
}
@Test
public void mockTest(){
DollarCalculator dollarCalculator = new DollarCalculator(marketApi);
dollarCalculator.init();
Carculator carculator = new Carculator(dollarCalculator);
System.out.println(carculator.sum(10, 10));
Assertions.assertEquals(60000, carculator.sum(10, 10)); <<
Assertions.assertEquals(0, carculator.minus(10, 10));
}
8.2 Rest API CRUD 테스트코드 작성하기
- 기존의 carculator, DollarCalculator, ICarculator, MarketApi >> component폴더생성하여 복붙
- DollarCalculator > component화~~~울랄라 어쩌고저쩌고 한다음
- Get방식의 test
// 웹특화라 자원줄일수있음
@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/calApi/sum")
.queryParam("x", "10")
.queryParam("y", "10")
).andExpect(
MockMvcResultMatchers.status().isOk()
).andExpect(
MockMvcResultMatchers.content().string("60000")
).andDo(MockMvcResultHandlers.print());
}
}
- post방식
- json 안쪽depth 설정하기
- ).andExpect(
MockMvcResultMatchers.jsonPath("$.result").value("0")
).andExpect(
MockMvcResultMatchers.jsonPath("$.response.resultCode").value("OK")
public class CalculatorApiController {
@PostMapping("/minus")
public Res minus(@RequestBody Req req){
int result = calculator.minus(req.getX(), req.getY());
Res res = new Res();
res.setResult(result);
res.setResult(result);
return res;
}
}
================
public class CalculatorApiControllerTest {
@Test
public void minusTest() throws Exception {
Req req = new Req();
req.setX(10);
req.setY(10);
String json = new ObjectMapper().writeValueAsString(req);
mockMvc.perform(
MockMvcRequestBuilders.post("http://localhost:8080/calApi/minus")
.contentType(MediaType.APPLICATION_JSON)
.content(json)
).andExpect(
MockMvcResultMatchers.status().isOk()
).andExpect(
MockMvcResultMatchers.jsonPath("$.result").value("0")
).andExpect(
MockMvcResultMatchers.jsonPath("$.response.resultCode").value("OK")
)
.andDo(MockMvcResultHandlers.print());
}
}
8.3 테스트 커버리지 확인하기
- jacoco로 확인 가능함
build.gradle에 추가
id 'jacoco'
- gradle > tasks > verification > test 더블클릭으로 실행
- build > reports > tests > test > index.html