我正在尝试测试我的控制器端点和我的请求体注释@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);
}
My BalanceInquiryModel
注释为@Valid
并且后面有一些休眠和自定义验证。这些验证都没有问题,并且已经进行了单元测试。
我喜欢测试的是我的端点,我在其中发送一个有效的 json 请求正文,期望得到 200 响应,并且还发送一个无效的 json 请求正文,期望得到由集合验证的 400 响应@Valid
执行。
例如,无效调用是不发送长度
我读过一些主题和一些用途MockMvcBuilders.standaloneSetup()
模拟完整的控制器。但我不会进行完整的集成测试。
不太确定如何继续这种情况以及我是否应该继续。
P.S.:目前,无论验证是否给出错误,我总是收到 200 响应。
这里有一个要点更多代码和验证类/模型。