转:使用DBUnit测试时违反外键约束的解决办法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转:使用DBUnit测试时违反外键约束的解决办法相关的知识,希望对你有一定的参考价值。

DBUnit是一个基于junit扩展的数据库测试框架。它提供了大量的类对与数据库相关的操作进行了抽象和封装。它会把数据库表里的数据和一个xml文件关联起来,也就是说它可以让数据在XML文件和数据库之间转换。基于这种设计模式DBUnit可以在测试之前,先备份数据库到一个临时XML文件中,然后删除数据库中的所有数据接着把我们写好的模拟数据存入数据库中,最后,在测试完毕后,删除现有数据再存入之前备份的数据,回溯到测试前的状态以达到各个单元测试互不影响的目的。

  但是如果dbunit测试的数据表之间存在外键关联,那么在进行备份后删除或还原前删除数据时DBUniit无法知道应该先删除哪张表再删除哪张表因此很容易报mysqlIntegrityConstraintViolationException错误。

 

 

解决办法:DBUniit是通过jdbc的Connection对象来获取连接的,可以在URL上加上sessionVariables=foreign_key_checks=0来禁止外键约束检查。

以上是关于转:使用DBUnit测试时违反外键约束的解决办法的主要内容,如果未能解决你的问题,请参考以下文章

DbUnit 无法清理插入:外键约束

JPA - 如何在单元测试之间截断表

Vapor fluent 不会在违反外键约束时抛出

在 HSQLDB 上使用 Spring DBUnit 进行休眠和 Spring 数据 - 由于外键约束而无法删除

truncate table时存在外键约束的解决办法

为啥在尝试删除违反外键约束的记录时,Azure Web 应用程序的性能会受到如此大的影响?