有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaDbrider没有在新的测试类运行之前清理数据,我如何解决这个问题?

不太清楚这里发生了什么。 我有许多测试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:兔子问题已经解决,DBRider问题仍然存在
有趣的是,当我在jenkins build服务器上运行它时,只有最后两个测试失败。当同事在他们的机器上本地运行它时,他们得到的结果和我一样


共 (1) 个答案

  1. # 1 楼答案

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

    @DBUnit(allowEmptyFields = true, cacheConnection = false)