728x90

1. JUnit

TDD : 테스트 주도 개발에서 사용하지만 코드의 유지보수 및 운영 환경에서의 
에러를 미리 방지하기 위해서 단위별로 검증하는 테스트 프레임워크
_________________________________________________________________
JUnit : Java 기반의 단위 테스트를 위한 프레임워크
Annotation 기반으로 테스트를 지원하며 Assert를 통하여 검증

  - mockito dependencies
     testImplementation group: 'org.mockito', name: 'mockito-core', version: '4.2.0'
     testImplementation group: 'org.mockito', name: 'mockito-junit-jupiter', version: '4.2.0'
_________________________________________________________________
Jacoco
  java 코드의 코드 커버리지를 체크하는 라이브러리
  결과를  html, xml , csv로 확인 가능
 
main의 코드를 그대로 가져와서 @Test 어노테이션 붙여서 테스트 실행
 
@ExtendWith(MockitoExtension.class)
public class DollarCalculatorTest {

    @Mock
    public MarketApi marketApi;  :: Mock 처리 대상

    @BeforeEach   :: 테스트가 실행되기 이전에
    public void init(){
        :: marketApi.connect() 이 호출이 될때 3000 return
        Mockito.lenient().when(marketApi.connect()).thenReturn(3000);
    }

    @Test
    public void mockTest(){
        :: 매번 다른값이 나올때 모킹 처리
        :: 특정 개체가 어떤 메소드가 호출이 되었을때 원하는값 return
        :: MarketApi marketApi = new MarketApi(); 대신 public MarketApi marketApi;

        DollarCalculator dollarCalculator = new DollarCalculator(marketApi);
        dollarCalculator.init();

        Calculator calculator = new Calculator( dollarCalculator );
        Assertions.assertEquals(60000 , calculator.sum(10,10));
        Assertions.assertEquals(0 , calculator.minus(10,10));
    }
}
 
 

 

2. REST API CRUD 테스트

패키지 구조를 맞추어야 Test 가능
Service( component ) Test
__________________________________
@SpringBootTest
public class DollarCalculatorTest {

    @MockBean
    private MarketApi marketApi;

    @Autowired
    private Calculator calculator;

    @Test
    public void dollarCalculatorTest(){

        Mockito.when(marketApi.connect()).thenReturn(3000);
        int sum = calculator.sum(10,10);
        int minus = calculator.minus(10,10);

        Assertions.assertEquals(60000 , sum);
        Assertions.assertEquals(0 , minus);
    }
}
 
Controller Test
__________________________________
@WebMvcTest(CalculatorApiController.class)
@AutoConfigureWebMvc
@Import({Calculator.class , DollarCalculator.class})
public class CalculatorApiControllerTest {

    @MockBean
    private MarketApi marketApi;

    @Autowired
    private MockMvc mockMvc; ::  mvc를 Mocking으로 테스트 하겟다.

    @BeforeEach
    public void init(){
        Mockito.when(marketApi.connect()).thenReturn(3000);
    }

    @Test  //GET , delete
    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(
                MockMvcResultMatchers.content().string("60000")
        ).andDo(MockMvcResultHandlers.print());
    }

    @Test //post , put
    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/api/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());
    }
}
 

springcalculator.zip
0.00MB

 
 
 
 

 

3. Jacoco  

 
728x90

+ Recent posts