假设我有一个这样的模型类:
public class User {
@NotEmpty(message = "Email is required")
private String email;
}
我希望能够对自定义错误消息“需要电子邮件”进行单元测试
到目前为止,我有这个单元测试代码可以使用,但不会检查错误消息。
@Test
public void should_respond_bad_request_with_errors_when_invalid() throws Exception
{
mock().perform(post("/registration/new"))
.andExpect(status().isBadRequest())
.andExpect(view().name("registration-form"))
.andExpect(model().attributeHasFieldErrors("user", "email"));
}
答案 0 :(得分:1)
好像你不能。
但我建议你通过attributeHasFieldErrorCode
方法解决。
拥有以下内容:
@NotNull(message="{field.notnull}")
@Size(min=3, max=3, message="{field.size}")
public String getId() {
return id;
}
我在我的测试方法中有以下内容(如果我的数据因最小或最大约束而失败,它属于@Size
注释)
.andExpect(model().attributeHasFieldErrorCode("persona", "id", is("Size")))
或
.andExpect(model().attributeHasFieldErrorCode("persona", "id", "Size"))
该方法有两个版本,包含和不包含Hamcrest
即使您使用message = "Email is required"
(原始/直接内容)并使用message="{field.size}")
要从.properties
文件中使用的密钥,我们的message
属性也是如此 内容几乎属于一种独特的注释。在您的情况下为@NotNull
,在我的情况下为Size
。
因此,在某种程度上无关紧要的是什么是消息(原始或密钥),重要的是该消息的所有者(在这种情况下是注释)完成了它的工作并且它已经通过{{1}进行了验证方法。
不要与类似的方法名称混淆:attributeHasFieldErrorCode
和attributeHasFieldErrors
。
答案 1 :(得分:-1)
我遇到了同样的问题。我找到了下面描述的一些解决方案。主要思想是检查错误代码,而不是错误消息。
BindingResult bindingResult = (BindingResult)
mock().perform(post("/registration/new")).andReturn().getModelAndView().getModelMap().get("org.springframework.validation.BindingResult.user");
assertEquals(bindingResult.getFieldError(email).getCode(), "error.code");