패캠스프링/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