2013-11-20 79 views
3

比方说,我有一个这样的模型类:如何单元测试Spring MVC验证注解错误消息?

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

可能的重复[在Spring MVC中有基于批注的验证的单元测试形式bean的良好模式](http://stackoverflow.com/questions/9516079/good-patterns-for-unit-testing-form-b​​eans - 即具备的,标注为基础的验证) –

回答

-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"); 
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

因此,在某些方面并不重要什么是消息(原始或关键),重要的是该消息的所有者(在这种情况下是注释)完成了它的工作,并且已经通过attributeHasFieldErrorCode方法进行了验证。

不要与类似的方法名称混淆:attributeHasFieldErrorsattributeHasFieldErrorCode