@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容器初始化期间没有注册。
当我运行应用程序时,这些验证器注册正常。
我的控制器测试会忽略为什么我的自定义验证器会被忽略?
答案 0 :(得分:0)
我启用了MockMvcResultHandlers.print()以查看问题所在。事实证明,我的验证器所依赖的存储库未定义。在BaseTestConfig中定义它解决了这个问题。