【发布时间】:2018-03-14 17:31:21
【问题描述】:
我正在尝试测试我的控制器端点和带有@Valid 注释的请求正文。我的 Testclass 如下所示:
@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 请求正文,期望得到 200 响应,以及一个无效的 json 请求正文,期望得到 400 响应,由 set @Valid 实现验证。
例如,一个无效的调用是不发送 pinNumber 或长度
我已经阅读了一些线程和一些使用MockMvcBuilders.standaloneSetup() 来模拟完整的控制器。但我不会做一个完整的集成测试。
不太确定如何处理这种情况以及是否应该继续。
P.S.:目前,无论验证是否应该给出错误,我总是得到 200 响应。
Here a gist 获取更多代码和验证类/模型。
【问题讨论】:
-
你在邮递员中测试过,验证失败时会得到 400?
-
@ChiDov 是的。例如,当我发送 pinNumber 长度
标签: spring-mvc spring-boot junit mockito spring-mvc-test