오늘은 테스트 케이스에 대해 작성하는 방법에 대해서 정리하고자 한다.
기본적으로 테스트는 기능테스트, 통합테스트 , 단위 테스트로 나뉘고
기능 테스트 | 애플리케이션 전체 |
통합 테스트 | 데이터베이스와 연결하여 테스트 |
슬라이스 테스트 | 애플리케이션 내 메서드 기능 |
FIRST원칙을 따르는데
FAST 빠르게
Independent 독립적으로
Repeatable 반복적으로
Self-validating 셀프 검증이 되도록
Timely 시기 적절하게
라는 원칙을 따르게 된다.
보통 JAVA에서는 Junit을 사용하여 단위 테스트를 하게 되고,
Assertion(어써션)이란?
Assertion(어써션)을 검색해 보면 우리말로 ‘단언’, ‘단정’ 등의 뜻을 확인할 수 있는데 그 의미가 선뜻 와닿지 않습니다.
테스트 세계에서 Assertion(어써션)이라는 용어는 테스트 결과를 검증할 때 주로 사용합니다.
assertEquals(expected, actual);
이런 식으로 사용하여 검사를 진행하게 된다.
assertNotNull(currencyName, "should be not null");
null에 대한 검사도 할 수 있고,
assertThrows(NullPointerException.class, () -> getCryptoCurrency("XRP"));
예외에 대한 검사도 할 수 있다.
Hamcrest란 Junit에서의 결과를 조금더 알아보기 쉽게 하기위해서 사용하는 것이고,
assertThat(actual, is(equalTo(expected)));
이런 식으로 사용하게 된다. 하지만 예외의 부분에서는 단독적으로 처리하지 못해서 junit이랑 같이 사용하거나,
Hamcrest 만으로 던져진 예외를 테스트하기 위해서는 Custom Matcher를 직접 구현해서 사용할 수 있습니다.
JAVA에서는 Spring boot를 통한 API도 테스트 할 수 있다.
mockMvc
이란 프레임 워크를 사용하게 되고 ,
@SpringBootTest
@AutoConfigureMockMvc
를 명시해 주어야 한다. 그리고 @Autowired 를 통해 MockMvc를 불러와야한다.
DTO를 통하여 먼저 객체를 만든후 객체를 JSON형식으로 만들고,
String content = gson.toJson(post);
ResultActions actions =
mockMvc.perform( // (3)
post(location) // (4)
.accept(MediaType.APPLICATION_JSON) // (5)
.contentType(MediaType.APPLICATION_JSON) // (6)
.content(content) // (7)
);
이런 맥락을 통해서 API를 호출하게 된다 .
actions
나온 actions을 통해서 .andExpect를 통해 검증을 하거나 header().string(~~)해서 확인 할 수있다.
mockMvc.perform(
get(location)
.accept(MediaType.APPLICATION_JSON)
)
get도 마찬가지로써 만약 parm값이 필요하다면 .parm("변수명","값")이렇게 매핑해주면 된다.
테스트를 하다보면 같은 코드의 반복이 눈에 띄게 보이는데 이것을 따로 묶어서 매핑시켜주면 편하게 사용 가능하다.
@DataJpaTest
이것을 붙이고 Repository에 대한 테스트도 가능하게 되는데 이것은, 자동으로 Rollback이 되기에 아주 편리한 데이터베이스와의 관계를 확인 할 수 있다.
'부트캠프 > 코트스테이츠 백엔드 코스' 카테고리의 다른 글
40 회고 (0) | 2023.05.08 |
---|---|
37(테스팅과 API document작성) (0) | 2023.05.05 |
32~34 (0) | 2023.04.30 |
30~31 (0) | 2023.04.27 |
28~30회고 (0) | 2023.04.16 |