我有一种情况,我们想在启动时检查Spring MVC代码并抛出异常(从而导致ApplicationContext
失败)当某些条件不满足时。
有没有办法检测JUnit测试以捕获Spring启动(特别是大多数情况下的Spring Boot)异常,以便它们不会导致测试失败?如果异常不发生,我基本上想要通过测试失败。
答案 0 :(得分:0)
我昨天能够解决问题。由于SmartContextLoader
和AnnotationConfigWebContextLoader
等默认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);
}