java 测试后清理数据库实体

qmelpv7a  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(84)

我正在写一个自动测试(用JavaMaven +JUnit+Cucumber)

  • 在开始testcase之前,我需要为test创建一个用户,并在db中创建一些实体(让它们命名为entity1和entity2)
  • 在测试用例中,我通过单击UI中的“创建”按钮创建了entity3(entity3连接到entity1,数量为1)
  • 在testcase结束后,我需要清理(这意味着删除所有的数据,我在测试之前创建的和所有的数据在测试过程中从ui创建)

现在我尝试在结束后对db进行一些删除查询,但面临一些问题:
1.表之间相互连接,在测试结束时,我在其他表中有一堆引用我的初始entity1和entity2的行,需要级联删除它们,这需要花费大量时间,最终它将导致after方法花费比测试本身更多的时间
1.级联删除时未指定表,我无法更改它,因为这是预期行为
1.它是开发环境,也用于手动测试,所以我不能只是删除所有数据,我需要删除的只有什么是由自动测试创建
我知道有一些 hibernate 的东西,但我从来没有使用过它,我不确定它是否可以使我需要的
进出口寻找一些选项,我可以保存数据库是如何测试前,然后做测试,然后恢复所有发生的数据库,所以它是相同的,因为它是测试前

niknxzdl

niknxzdl1#

有三种方法可以做到这一点。也许两者都不是“最好的”,但都有效。

  1. Hibernate有一个名为初始导入的功能,它使用import.sql文件。你需要在每次测试之前重新创建数据库。这种解决方案很古老,并且难以在具有多个测试的环境中维护。
    1.您可以使用LiquidbaseFlywaytestcontainers的组合。然后,每个测试将从一个独立的DB从docker容器开始。测试容器将设置数据库,liquidbase/flyway将填充它。
    1.在Junit 5中使用一个名为DBUnit的旧库和一些extensions

相关问题