Spring ServletRegistrationBean未在JUnit Test

时间:2015-07-02 16:33:33

标签: spring-mvc servlets junit

我正在尝试在Spring Boot应用程序中测试Rest服务。 当我运行或调试整个应用程序时,我可以成功完成。 Spring Bott开始显示以下几行:

2015-07-02 17:04:10.654  INFO 3084 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.0.20
2015-07-02 17:04:10.769  INFO 3084 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2015-07-02 17:04:10.769  INFO 3084 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2449 ms
2015-07-02 17:04:11.219  INFO 3084 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2015-07-02 17:04:11.224  INFO 3084 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [/*]
2015-07-02 17:04:11.224  INFO 3084 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]

但是,当我运行JUnit测试时,一切正常,请求映射工作等,除了servlet没有初始化。实际上,上面的那些行没有出现。

这很奇怪,因为我正在使用我用来运行整个应用程序的相同Application.class运行测试。这是Application.class:

@ImportResource("classpath:/META-INF/spring/integration/spring-integration-context.xml")
@SpringBootApplication
@WebAppConfiguration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

从我的JUnit测试:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public class CatalogRestControllerTests extends AbstractTransactionalJUnit4SpringContextTests {
...
@Test
public void someTest() {...}
}

我一直在尝试从servlet-context.xml和web.xml配置文件中解决问题。但我不认为问题存在,因为它适用于Application.class

有什么想法吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

找到它。

所以我的JUnit类似乎缺少 @WebIntegrationTest 注释。这就是文档中关于 @WebIntegrationTest

的内容
  

测试类注释,表示测试是“Web集成   测试“因此需要完全启动,方式与a。相同   生产应用程序(正常端口监听)。通常用于   与@SpringApplicationConfiguration结合,

     

此注释可用作@IntegrationTest和的替代   @WebAppConfiguration。