我们有一些集成测试(使用spring框架编写)由于bean初始化异常而失败,最终导致Failed to load ApplicationContext
。根据我对spring testing docs的理解,ApplicationContext
的加载发生在类级别,所以我的疑问是-
1.一旦ApplicationContext
发生故障(即Failed to load ApplicationContext
)在集成测试类运行期间由于bean初始化异常,ApplicationContext
是否尝试为该特定集成测试类中存在的每个单独集成测试再次启动(最终将失败)?
1.问上面的场景,因为我们看到当bean失败发生时,到postgres的连接数量激增,似乎对于集成测试类中的每个集成测试(最终由于Failed to load ApplicationContext
而失败),spring试图创建一个到postgres的新连接,并且在ApplicationContext
失败之前没有销毁它。我们如何才能阻止这种情况,请提供一些建议。
1.另外,一旦我们得到Failed to load ApplicationContext
,是否有一种方法可以完全自动地以编程方式终止所有集成测试的运行?如果是,请帮助如何实现它?谢谢
测试框架- junit + Spring
更新:提及使用的测试框架。
4条答案
按热度按时间ygya80vv1#
如果
ApplicationContext
反复加载失败,目前没有办法中止集成测试。如需投票支持,请参阅this Spring Framework issue。
sg2wtvxw2#
1.如果在测试类中有多个集成测试,那么它将多次失败。
1.您可以使用dependsOnGroups属性终止所有集成测试用例。
例如,您可以有一个方法来检查是否有bean异常失败,并声明所有其他测试都依赖于此方法。但这可以使用TestNG来完成
您可以从TestNG -> www.example.com了解更多信息https://testng.org/doc/documentation-main.html#dependent-methods
注意:-如果你使用的是JUnit,还有一些其他的方法可以做同样的事情。请在这种情况下更新。
voj3qocg3#
如果你使用的是JUnit,那么在你的测试类中添加下面的登录名,它就可以工作了。
建议您通过下面的参考资料来详细了解。
https://junit.org/junit4/javadoc/4.13/org/junit/BeforeClass.html
https://howtodoinjava.com/testng/testng-before-and-after-annotations/
hjzp0vay4#
我刚刚在Spring Framework 6.1 M1中实现了对"test context failure threshold"的内置支持。
从Spring Framework 6.1开始,上下文 * 失败阈值 * 策略已经到位,这有助于避免重复尝试加载失败的
ApplicationContext
。默认情况下,失败阈值设置为1
,这意味着对于给定的上下文缓存键,只会尝试加载一次ApplicationContext
。任何后续尝试加载相同上下文缓存键的ApplicationContext
都将导致立即执行IllegalStateException
,并显示一条错误消息,解释该尝试被抢先跳过。有关详细信息,请参阅Spring Framework reference manual。