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


class MyWebAppInitializer extends WebApplicationInitializer {
  def onStartup(servletContext: ServletContext): Unit = {
      ...
  }
}
@RunWith(classOf[SpringJUnit4ClassRunner])
@WebAppConfiguration
@ContextConfiguration(classes = Array(classOf[MyConfig]),
    initializers=Array(classOf[MyWebAppInitializer]))     // <<< ERROR
class MyTest {
  ...
}

投诉内容:

annotation argument needs to be a constant; found: classOf[MyWebAppInitializer] 

更新:@M。Deinum指出这里只允许使用ApplicationContextInitializers——所以这个错误是严重报告的类型不匹配。

所以…我如何按照顺序使用我自己的MyWebAppInitializer并测试其中定义的功能?

在您的上下文配置中,我没有看到您列出了上下文加载器。AnnotationConfigWebContextLoader将在你的类路径上定位WebApplicationInitializer的实例,通过添加这个并删除初始化器(正如你所注意到的,这是为applicationcontextinitializer而不是WebApplicationInitializer),然后你应该都设置好了。

@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"));
    }
}

答案是"对不起,你不能"。你可以参考这个:春天frameworkspr - 10199添加使用WebApplicationInitializer测试Spring web应用程序的功能

正如Sam Brannen所说:

虽然Spring确实提供了Servlet API的模拟,但是Spring没有不模拟Servlet容器,目前也不打算这样做。春天一直专注于容器外集成测试。完全因此,模拟容器超出了Spring测试的范围支持。请参阅Rossen和我以上的评论细节。

相关内容

  • 没有找到相关文章

最新更新