2013-11-20 76 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