movckmvc测试返回正确的错误消息

时间:2014-12-05 13:43:41

标签: spring-mvc junit integration-testing mockmvc

以下测试(测试验证失败,因为用户接受的条款和条件不是最新版本)工作正常,但我想测试返回的错误消息。这样做的原因是后续测试(如果接受的条款和条件版本为null,则检查验证失败)将具有相同的测试标准。

因此,我还想测试返回的错误消息。我花了一整个上午搜索某些东西,找不到任何让我想知道是否甚至可以访问/测试错误消息值的内容?我可以在模型中看到它,但我正在努力访问/测试它。

任何帮助将不胜感激!

提前致谢

取值

TEST

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration({ "file:src/main/webapp/WEB-INF/spring-servlet.xml" })
public class FailureRegistrationControllerTest {

@Autowired
private WebApplicationContext wac;

private MockMvc mockMvc;

@Before
public void setUp() throws Exception {
    mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}

@Test
public void acceptedVersionIsNotTheLatestTest() throws Exception {

    //Create the DTO User
    UserRegistrationDTO user = TestingUtility.createMinimumUserDTO();
    user.setTermsAndConditionsVersion(TestingConstants.NOT_LATEST_TERMS_AND_CONDITIONS);

    //Run the test
    ResultActions resultActions = TestingUtility.buildResultsActionsMinimum(mockMvc, user);

    resultActions.andExpect(status().isOk()); 
    resultActions.andExpect(view().name("register"));
    resultActions.andExpect(model().attributeHasFieldErrors("user", "termsAndConditionsAccepted"));

}

1 个答案:

答案 0 :(得分:1)

我试图解决类似的问题,但我只是没有非常正式的解决方案。我检查了code他们是如何做的,我发现任何错误都存储在前缀为BindingResult.MODEL_KEY_PREFIX的模型中,请参阅他们的代码:

private BindingResult getBindingResult(ModelAndView mav, String name) {
    BindingResult result = (BindingResult) mav.getModel().get(BindingResult.MODEL_KEY_PREFIX + name);
    assertTrue("No BindingResult for attribute: " + name, result != null);
    return result;
}

因此您可以从模型中获取并检查详细信息...