DBRider在运行新测试类之前没有清除数据,我该如何解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DBRider在运行新测试类之前没有清除数据,我该如何解决?相关的知识,希望对你有一定的参考价值。

不确定是怎么回事。我有许多测试Controllers的测试类,它们在一段时间内都能正常工作,但是后来我不得不合并一个特别大的提交,然后第一个测试类按预期运行,但是此后每个失败。我正在使用以下注释:

在课堂上:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = MyServiceTestApplication.class)
@ActiveProfiles("test")
@EnableTestAuthentication
@DBRider
@DBUnit(allowEmptyFields = true)
public class MyControllerIT 

关于测试方法:

@Test
@DataSet(value = "datasets/files.json", "datasets/setting.json")
public void testGetMyDeltaInfo()

在运行第一个测试之后,数据库在接下来的两组测试中从每个存储过程中返回0行。如果我一次成功运行三组测试,则它们全部成功完成,则每个类将进行3到8个测试。我在这里想念什么?

编辑:我尝试将cleanBefore=true属性添加到@DataSet批注中,但没有任何区别。编辑2:-看起来问题可能出在DBRider做事之前;绑定到rabbitmq可能是一个问题。

编辑3:Rabbit问题已经解决,DBRider问题仍然存在。有趣的是,当我在jenkins构建服务器上运行它时,只有最后两个测试失败。当同事在他们的计算机上本地运行它们时,他们得到的结果与我相同。

答案

该问题是由于DBUnit在测试之间未释放db连接所致,这导致正在运行的下一个测试无法获取数据库连接。我们仍然不确定为什么会这样,因为在进行合并之前,这些测试按预期工作。无论如何,都可以通过将cacheConnection属性添加到@DBUnit批注并将其设置为false来解决,如下所示:

@DBUnit(allowEmptyFields = true, cacheConnection = false)

以上是关于DBRider在运行新测试类之前没有清除数据,我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

NVD3,在加载新图表之前清除 svg

在 xcode ui test 中运行所有测试类

在每次测试运行之前清除Cursive REPL状态

为啥每次单元测试后我的数据库都没有被清除?

如何通过 API 清除 Stripe 中的测试数据?

运行宏excel后清除“撤消”历史按钮