需要能够在单元测试中捕获Spring启动异常

时间:2015-02-26 20:40:38

标签: java spring spring-mvc junit spring-boot

我有一种情况,我们想在启动时检查Spring MVC代码并抛出异常(从而导致ApplicationContext失败)当某些条件不满足时。

有没有办法检测JUnit测试以捕获Spring启动(特别是大多数情况下的Spring Boot)异常,以便它们不会导致测试失败?如果异常不发生,我基本上想要通过测试失败。

2 个答案:

答案 0 :(得分:0)

我昨天能够解决问题。由于SmartContextLoaderAnnotationConfigWebContextLoader等默认SpringApplicationContextLoader类(由注释引入)完全加载ApplicationContext,因此我无法捕获任何例外情况。

我提出的解决方案 - 我确信还有更优雅的解决方案 - 创建我自己的SmartContextLoader实现,将所有内容委托给AnnotationConfigWebContextLoader,除了loadContext方法。在那里,我做了所有事情,除了刷新WebApplicationContext。然后,在我的测试方法中,我手动构建并运行了SpringBootApplication,它将保存我的测试控制器(和无效配置)。

感谢@ viktor-sorokin和@grzesuav让我开始走上正确的道路。

答案 1 :(得分:0)

在JUnit测试中,您可以通过编程方式启动Spring Boot应用程序-类似于Application类的main()方法。在这样的测试中,您可以像往常一样声明异常。

  @Test
  public void test() {
    SpringApplication springApplication = new SpringApplication(MySpringBootApp.class);
    // Here you can manipulate the app's Environment, Initializers etc.     

    assertThatThrownBy(() -> {
      springApplication.run();
    }).isInstanceOf(Exception.class);
  }