gpt4 book ai didi

java - 在 Junit 测试用例中处理 MethodArgumentNotValidException?

转载 作者:行者123 更新时间:2023-11-29 08:53:17 29 4
gpt4 key购买 nike

我正在使用 spring MVC 测试:在我的测试用例中,我传递了一个无效的 Bar 对象(年龄为零)。正在抛出 MethodArgumentNotValidException,但它嵌套在 NestedServletException 中。是否有通过现有/自定义 HandlerExceptionResolver 从 Controller 中抛出 MethodArgumentNotValidException 异常,以便我当前的测试用例 checkHit2 通过?

Controller :

@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>

最佳答案

我有类似的问题,我修复了它从 NestedServletException 扩展我的异常类。例如:

@RequestMapping(value = "/updateForm/{roleID}", method = RequestMethod.GET)
public String updateForm(@PathVariable Long roleID, Model model, HttpSession session) throws ElementNotFoundException {

Role role = roleService.findOne(roleID);
if (role == null) {
throw new ElementNotFoundException("Role");
}

...
}

我的异常看起来像:

public class ElementNotFoundException extends NestedServletException {

private static final long serialVersionUID = 2689075086409560459L;

private String typeElement;

public ElementNotFoundException(String typeElement) {
super(typeElement);
this.typeElement = typeElement;
}

public String getTypeElement() {
return typeElement;
}

}

所以我的测试是:

@Test(expected = ElementNotFoundException.class)
public void updateForm_elementNotFound_Test() throws Exception {
String roleID = "1";

Mockito.when(roleService.findOne(Long.valueOf(roleID))).thenReturn(null);

mockMvc.perform(get("/role/updateForm/" + roleID)).andExpect(status().isOk()).andExpect(view().name("exception/elementNotFound"));
}

关于java - 在 Junit 测试用例中处理 MethodArgumentNotValidException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21620964/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com