Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何使用自定义WebApplicationInitializer运行测试?_Spring_Scala_Spring Mvc_Spring Test - Fatal编程技术网

Spring 如何使用自定义WebApplicationInitializer运行测试?

Spring 如何使用自定义WebApplicationInitializer运行测试?,spring,scala,spring-mvc,spring-test,Spring,Scala,Spring Mvc,Spring Test,更新:@M.Deinum指出这里只允许ApplicationContextInitializer——因此错误是错误报告的类型不匹配 所以。。。如何使用自己的MyWebAppInitializer来测试其中定义的功能?在您的上下文配置中,我看不出您列出了上下文加载器。将在类路径上找到的实例,通过添加该实例并删除初始化器(正如您所指出的,初始化器是针对ApplicationContextInitializers而不是WebApplicationInitializers的),然后应该设置所有实例 an

更新:@M.Deinum指出这里只允许ApplicationContextInitializer——因此错误是错误报告的类型不匹配


所以。。。如何使用自己的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"));
    }
}