测试后 SpringJUnit4ClassRunner 是不是仍然不能可靠地调用 DisposableBean.destroy

Posted

技术标签:

【中文标题】测试后 SpringJUnit4ClassRunner 是不是仍然不能可靠地调用 DisposableBean.destroy【英文标题】:Is it still true that SpringJUnit4ClassRunner can't reliably call DisposableBean.destroy after tests测试后 SpringJUnit4ClassRunner 是否仍然不能可靠地调用 DisposableBean.destroy 【发布时间】:2015-05-04 22:03:54 【问题描述】:

根据:https://jira.spring.io/browse/SPR-4103 SpringJUnit4ClassRunner 不会总是在测试后调用 DisposableBean.destroy (*facepalm*!)——由于 JUnit 的实现问题。

这仍然是真的吗?

我正在像这样在 scala 中创建测试:

@RunWith(classOf[SpringJUnit4ClassRunner])
@WebAppConfiguration
@ContextConfiguration(classes = Array(classOf[Service1Config]))
class Service1Test 

  @Test
  def test1(): Unit = 
  



@RunWith(classOf[SpringJUnit4ClassRunner])
@WebAppConfiguration
@ContextConfiguration(classes = Array(classOf[Service2Config]))
class Service2Test 

  @Test
  def test2(): Unit = 
  


我发现Service1Config中bean的destroy方法在执行Service2Test时没有被销毁。

我发现很多文章都建议添加 @After 来显式关闭上下文。这听起来像是一个等待发生的错误(因为如果您忘记在一个测试中添加 @After 清理,下一个测试类将失败,您将不知道为什么)。

如果使用 SpringJUnit4ClassRunner/JUnit 仍然无法做到这一点,是否有一个测试框架会在每次测试后自动调用上下文清理?

【问题讨论】:

【参考方案1】:

尝试添加到类中

@DirtiesContext(classMode=ClassMode.AFTER_CLASS)
class Service1Test 

这样就可以了。

【讨论】:

以上是关于测试后 SpringJUnit4ClassRunner 是不是仍然不能可靠地调用 DisposableBean.destroy的主要内容,如果未能解决你的问题,请参考以下文章

弹簧测试在测试后不回滚

摩卡在测试后没有退出

当公司辞掉85后测试员选择95后测试员后...

罐式后翻性能测试

一些测试运行后测试容器失去连接

在所有测试运行后开玩笑清理