728x90
반응형
💡 Test 방법을 알아보자!
웹 서버를 실행시켜 직접 사용해보지 않아도 테스트 클래스를 만들어 코드를 테스팅 해볼 수 있다.
Testing (Annotation)
@SpringBootTest
- 통합 테스트를 제공하며, 애플리케이션에 설정된 빈을 모두 로드한다.
@Test
- Test 메서드로 인식하고 테스트 한다.
@BeforeAll
- 해당 테스트 클래스를 초기화할 때 딱 한번 수행되는 메서드다. (static 으로 선언해야한다)
@BeforeEach
- 테스트 메서드 실행 이전에 수행된다.
@AfterAll
- 해당 테스트 클래스 내 테스트 메서드를 모두 실행시킨 후 딱 한번 수행되는 메서드다. (static 으로 선언해야한다)
@AfterEach
- 테스트 메서드 실행 이후에 수행된다.
@WebMvcTest(abc.class)
- Controller를 테스트하는데 적합하며, 테스트할 클래스 지정한다.
- 웹 상에서 요청 / 응답에 대해 테스트함.
@AutoConfigureWebMvc
- Web과 관련된 자동 구성을 활성화하고 웹 레이어 만 활성화 합니다 .
- SpringBootTest의 하위구성.
@Import({abc.class, qwer.class})
- 테스트 시 필요한 클래스 가져오기
통합 테스트
- 전체에 대한 통합 테스트 (무거움)
@SpringBootTest // SpringBootTest 어노테이션을 붙이면 모든 빈이 등록됨.
public class DollarCalculatorTest {
@MockBean
private MarketApi marketApi;
@Autowired
private Calculator calculator;
@Test
public void dollarCalculatorTest(){
// connect가 발생될 때 3000을 return시키겠다.
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);
}
}
단위 테스트 (Get)
- GetController메서드의 반환값 테스트
@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( // 예상하다 - 상태가 OK
MockMvcResultMatchers.status().isOk()
).andExpect( // 예상하다 - 내용이 "6000"
MockMvcResultMatchers.content().string("60000")
).andDo(MockMvcResultHandlers.print()); // 결과값을 출력
}
}
단위 테스트 (Post)
- PostController메서드의 반환값 테스트
@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); // marketApi의 connect()메서드가 실행될 때 3000을 반환한다.
}
@Test
public void minusTest() throws Exception {
// <http://localhost:8080/api/sum>
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( // 예상하다 - Body(json)의 result의 결과값이 0이 나와야 한다.
MockMvcResultMatchers.jsonPath("$.result").value("0")
).andExpect( // 예상하다 - Body(json)의 response.resultCode의 결과값 OK.
MockMvcResultMatchers.jsonPath("$.response.resultCode").value("OK")
)
.andDo(MockMvcResultHandlers.print());
}
}
728x90
반응형
'📚Framework & Library > JUnit' 카테고리의 다른 글
[Junit] Elasticsearch Unit(Integration) Test Code 작성하기 (0) | 2024.01.23 |
---|---|
[Junit] Test 종류. Test Case (feat. 전자정부 프레임워크) (0) | 2023.11.17 |
[Junit] TypeReference, JsonPath - Json 다루기 (feat. ObjectMapper) (3) | 2023.11.17 |
[Junit] Junit4 다양한 라이브러리 활용 (feat. AssertJ, Unitils, RestAssured) (2) | 2023.11.17 |
[JUnit] JUnit의 개념과 기본 정리 (0) | 2023.09.10 |