0
@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 容器初始化期间没有注册。

当我运行应用程序时,这些验证器注册得很好。

知道为什么我的控制器测试忽略了我的自定义验证器吗?

4

1 回答 1

0

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

于 2014-04-19T13:27:37.297 回答