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

标签 java mysql spring-boot integration-testing dbunit

不太清楚这里发生了什么。 我有许多测试 Controller 的测试类,它们工作了一段时间,但后来我必须合并一个特别大的提交,在那之后第一个测试类按预期运行,但每个测试类都按预期运行之后失败了。 我正在使用以下注释:

在类里面:

@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 行。
如果我一次运行三组测试,它们都会成功完成,那么每个类(class)都有 3 到 8 个测试。
我在这里缺少什么?

编辑:我尝试将 cleanBefore=true 属性添加到 @DataSet 注释中,但没有任何区别。
编辑 2:--看起来问题可能是在 DBRider 执行此操作之前;可能是与rabbitmq绑定(bind)的问题。

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

最佳答案

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

@DBUnit(allowEmptyFields = true,cacheConnection = false)

关于java - DBRider 在新测试类运行之前没有清理数据,我该如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60113206/

相关文章:

java - 在 Talend 中导入外部 jar

java - 在哪里放置相机请求权限?

mysql - mysql 5.6安装文件夹中没有my.ini文件

java - jBPM 6 API 调用 REST API 的用法

mysql - 通过将以下查询合并为一个来加速它们

mysql - 验证数据库中的盐

java - 使用 servlet 过滤器时 App Engine 上的 Spring Boot 应用程序出现错误

Spring Data JPA .save() 方法未保存在数据库中

spring - 如何从 spring boot 本身在嵌入式 tomcat 服务器上部署 spring boot web 应用程序

java - 创建一个 Activity 作为实例?