【发布时间】:2014-03-04 11:08:44
【问题描述】:
我正在使用 Spring MVC 测试:在我的测试用例中,我传递了一个无效的 Bar 对象(年龄为零)。 MethodArgumentNotValidException 被抛出,但它嵌套在 NestedServletException 中。有没有办法通过现有/自定义的HandlerExceptionResolver 从控制器抛出MethodArgumentNotValidException 异常,以便我当前的测试用例checkHit2 通过?
控制器:
@RequestMapping(value="/test", method = RequestMethod.POST, headers="Accept=application/json")
@ResponseBody
public Bar getTables(@Valid @RequestBody Bar id) {
return id;
}
测试用例
@Before
public void setUp() {
mockMvc = standaloneSetup(excelFileUploader).setHandlerExceptionResolvers(new SimpleMappingExceptionResolver()).build();
}
@Test(expected=MethodArgumentNotValidException.class)
public void checkHit2() throws Exception {
Bar b = new Bar(0, "Sfd");
mockMvc.perform(
post("/excel/tablesDetail").contentType(
MediaType.APPLICATION_JSON).content(
TestUtil.convertObjectToJsonBytes(b)));
条形
public class Bar {
@JsonProperty("age")
@Min(value =1)
private int age;
public Bar(int age, String name) {
super();
this.age = age;
this.name = name;
}
...
}
Junit 输出
java.lang.Exception: Unexpected exception,
expected<org.springframework.web.bind.MethodArgumentNotValidException> but
was<org.springframework.web.util.NestedServletException>
【问题讨论】:
-
检查
ExpectedException规则并为您的包装异常编写您自己的衍生产品? -
这意味着我正在弯曲我的测试用例以接受
NestedServletException。我想要的是以某种方式更改控制器行为以直接抛出MethodArgumentNotValidException而不是将其嵌套在NestedServletException
标签: java spring spring-mvc-test