Spring 如何使用自定义WebApplicationInitializer运行测试?
更新:@M.Deinum指出这里只允许ApplicationContextInitializer——因此错误是错误报告的类型不匹配Spring 如何使用自定义WebApplicationInitializer运行测试?,spring,scala,spring-mvc,spring-test,Spring,Scala,Spring Mvc,Spring Test,更新:@M.Deinum指出这里只允许ApplicationContextInitializer——因此错误是错误报告的类型不匹配 所以。。。如何使用自己的MyWebAppInitializer来测试其中定义的功能?在您的上下文配置中,我看不出您列出了上下文加载器。将在类路径上找到的实例,通过添加该实例并删除初始化器(正如您所指出的,初始化器是针对ApplicationContextInitializers而不是WebApplicationInitializers的),然后应该设置所有实例 an
所以。。。如何使用自己的MyWebAppInitializer来测试其中定义的功能?在您的上下文配置中,我看不出您列出了上下文加载器。将在类路径上找到的实例,通过添加该实例并删除初始化器(正如您所指出的,初始化器是针对ApplicationContextInitializers而不是WebApplicationInitializers的),然后应该设置所有实例
annotation argument needs to be a constant; found: classOf[MyWebAppInitializer]
下面是一个工作示例
@RunWith(classOf[SpringJUnit4ClassRunner])
@WebAppConfiguration
@ContextConfiguration(classes = {ConfigClass.class, AnotherConfigClass.class}, loader=AnnotationConfigWebContextLoader.class))
class MyTest {
...
答案是“对不起,你不能”。
您可以参考以下内容:
正如萨姆·布兰宁所说:
尽管Spring确实为ServletAPI提供了模拟,但Spring确实提供了
不模拟Servlet容器,目前无意模拟。春天
一直专注于容器外集成测试。充分地
因此,模拟容器超出了Spring的测试范围
支持。请参阅上面罗森和我的评论以了解更多信息
细节
您可以提供
ApplicationContextInitializer
s而不是WebApplicationInitializer
s。看得很对(虽然我对Scala的错误报告感到失望,但我提供的值是常量,但错误是类型不匹配)。因此,如何使用自定义WebApplicationInitializer启动我的测试——Spring提供了定制其启动时的功能(人们经常这样做)。是否有方法在单元测试中测试此自定义项?已更新问题以反映剩余问题--如何测试WebApplicationInitializer。WebApplicationInitializer
用于引导应用程序,它与ServletContainerInitializer
一起工作。如果您想测试它,那么只需测试它。创建一个实例,将MockServletContext
的一个实例传递给startup方法,并查看它是否执行了您期望的操作。
@RunWith(classOf[SpringJUnit4ClassRunner])
@WebAppConfiguration
@ContextConfiguration(classes = {ConfigClass.class, AnotherConfigClass.class}, loader=AnnotationConfigWebContextLoader.class))
class MyTest {
...
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes={WebConfiguration.class, SecurityConfig.class}, loader=AnnotationConfigWebContextLoader.class)
@ActiveProfiles("dev")
public class AppTests {
private MockMvc mockMvc;
@Autowired
protected WebApplicationContext webApplicationContext;
@Before
public void setup() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void simple() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.view().name("index"));
}
}