java - DBRider 没有在新的测试类运行之前清理数据,我该如何解决这个问题?
问题描述
不完全确定这里发生了什么。我有许多测试类 test 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 构建服务器上运行它时,只有最后 2 个测试失败。当同事在他们的机器上本地运行它时,他们得到的结果和我一样。
解决方案
问题是由于 DBUnit 没有释放测试之间的 db 连接,这导致下一个正在运行的测试无法获取数据库连接。我们仍然不确定为什么会这样,因为这些测试在我们进行合并之前按预期工作。
无论如何,通过将cacheConnection
属性添加到@DBUnit
注释并将其设置为false
如下方式来解决它:
@DBUnit(allowEmptyFields = true, cacheConnection = false)
推荐阅读
- reactjs - 改变语言系统的方向问题
- angular - Angular Firestore 在按钮单击时更新特定文档字段
- java - 在 Eclipse 中向现有的 gui 组件添加功能
- laravel - 在 Docker 容器中运行 Laravel 应用,但 autoload.php 文件不存在
- java - android.app.RemoteServiceException:startForeground 的错误通知
- acumatica - Acumatica 和仪表板参数以及选择器和 PKID
- node.js - 将图像从公共 Docker Hub 拉取到 AWS Elastic Beanstalk 多个容器
- c++ - 为什么我在使用 STL 列表时不能使用这个回文函数?
- data-science-studio - Dataiku创建教程失败
- json - 如何从我的 React 表单提交中排除一个字段?