@Valid
주석을 사용하여 컨트롤러 끝점과 요청자를 테스트하려고합니다. 내 TestClass에는 다음과 같습니다SpringWebMvcTest - @Valid 및 사용자 정의 유효성 검사를 사용하여 요청 바디 테스트
@RunWith(SpringRunner.class)
@WebMvcTest(value = BalanceInquiryController.class, secure = false)
public class BalanceInquiryControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private BalanceInquiryController balanceInquiryController;
@Test
public void testGetBalanceInquiry() throws Exception {
RequestBuilder requestBuilder = MockMvcRequestBuilders
.post("/com/balanceInquiry")
.accept(MediaType.APPLICATION_JSON)
.content("{\"comGiftCard\":{\"cardNumber\":\"1234567890\",\"pinNumber\":\"0123\"},\"comMerchant\":\"MERCHANT1\"}")
.contentType(MediaType.APPLICATION_JSON);
MvcResult mvcResult = mockMvc.perform(requestBuilder).andReturn();
MockHttpServletResponse response = mvcResult.getResponse();
assertEquals(HttpStatus.OK.value(), response.getStatus());
}
}
내 컨트롤러 - @PostMapping
그 다음과 같습니다
@PostMapping(value = "/com/balanceInquiry")
public ResponseEntity<?> getBalanceInquiry(@Valid @RequestBody BalanceInquiryModel balanceInquiry, Errors errors) {
if (errors.hasErrors()) {
return new ResponseEntity<String>("Validation error", HttpStatus.BAD_REQUEST);
}
//do any stuff...
return new ResponseEntity<BalanceInquiryResponse>(balanceInquiryResponse, HttpStatus.OK);
}
내 BalanceInquiryModel
가 @Valid
주석 뒤에 일부 최대 절전 모드 및 사용자 정의 검증을 가지고 있습니다. 이러한 유효성 검사는 모두 정상이며 이미 단위 테스트를 거쳤습니다.
필자가 테스트하고자하는 엔드 포인트는 올바른 응답을 기대하는 json 요청 본문과 20034 응답을 기대하는 잘못된 json 요청 본문 (@Valid
집합으로 유효성이 검증 됨)을 보내는 엔드 포인트입니다.
는 예를 들어 unvalid 호출 내가 전체 컨트롤러를 조롱하는 일부 스레드와 일부 사용 MockMvcBuilders.standaloneSetup()
을 읽고 < 4.
더 pinNumber 또는 길이를 보낼 것입니다. 하지만 나는 완전한 통합 테스트를하지 않을 것이다.
이 상황을 어떻게 진행하고 계속해야하는지에 대해서는 잘 모릅니다.
추신 : 현재 유효성 검사에서 오류가 발생하는지 여부와 관계없이 항상 200 응답을 얻습니다.
Here a gist 더 많은 코드와 유효성 검사 클래스/모델.
당신이 우편 배달부에서 테스트 않았고이 때 검증 당신에게 400를 얻을 것이다 :
하지만 귀하의 경우
, 당신은 그것을 봄 유효성 검사를 실행하려면, 당신은 세부에 대한 @SpringBootTest를 사용해야합니다 실패한? –
@ChiDov 예. 예를 들어, 내가 pinNumber 길이 <4를 보낼 때 – Patrick