Spring MockMvc - 在Spring Container中未注册/调用自定义验证器

时间:2014-04-19 04:54:39

标签: java spring spring-mvc mockito spring-mvc-test

@Configuration
@EnableWebMvc
@ComponentScan("com.xyz.web")
class BaseTestConfig extends WebMvcConfigurerAdapter {

    @Bean
    AccountService accountService() {
        return Mockito.mock(AccountService)
    }

}

class Test {
    @Autowired WebApplicationContext wac

    MockMvc mockMvc

    @BeforeClass
    void setup() {
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build()
    }

    @Test
    void testSubmitPageFails() {
        mockMvc.perform(post("/createAccount")
                .param("account.username", "x")
                .param("confirmEmail", "y")
                .param("account.firstName", "")
                .param("account.lastName", "")
                .param("account.zip", ""))
                .andExpect(model().errorCount(5))
                .andExpect(view().name("account/createAccount"))
                .andExpect(status().isOk())
    }

    @Test
    void testSubmitPageSucceeds() {
        mockMvc.perform(post("/createAccount")
                .param("account.username", "test@test.com")
                .param("confirmEmail", "test@test.com")
                .param("account.firstName", "John")
                .param("account.lastName", "Doe")
                .param("account.zip", "22102"))
                .andExpect(flash().attributeCount(1))
                .andExpect(status().isMovedTemporarily())
                .andExpect(redirectedUrl("/home"))
    }
}

我定义了我的测试类和配置类,如上所示。但是,没有调用@Valid注释的控制器方法。看起来它们在Spring容器初始化期间没有注册。

当我运行应用程序时,这些验证器注册正常。

我的控制器测试会忽略为什么我的自定义验证器会被忽略?

1 个答案:

答案 0 :(得分:0)

我启用了MockMvcResultHandlers.print()以查看问题所在。事实证明,我的验证器所依赖的存储库未定义。在BaseTestConfig中定义它解决了这个问题。