使用DBUnit测试时违反外键约束的解决办法
2015-06-15 11:44
239 查看
DBUnit是一个基于junit扩展的数据库测试框架。它提供了大量的类对与数据库相关的操作进行了抽象和封装。它会把数据库表里的数据和一个xml文件关联起来,也就是说它可以让数据在XML文件和数据库之间转换。基于这种设计模式DBUnit可以在测试之前,先备份数据库到一个临时XML文件中,然后删除数据库中的所有数据接着把我们写好的模拟数据存入数据库中,最后,在测试完毕后,删除现有数据再存入之前备份的数据,回溯到测试前的状态以达到各个单元测试互不影响的目的。
但是如果dbunit测试的数据表之间存在外键关联,那么在进行备份后删除或还原前删除数据时DBUniit无法知道应该先删除哪张表再删除哪张表因此很容易报MySQLIntegrityConstraintViolationException错误。
解决办法:DBUniit是通过jdbc的Connection对象来获取连接的,可以在URL上加上sessionVariables=foreign_key_checks=0来禁止外键约束检查。
但是如果dbunit测试的数据表之间存在外键关联,那么在进行备份后删除或还原前删除数据时DBUniit无法知道应该先删除哪张表再删除哪张表因此很容易报MySQLIntegrityConstraintViolationException错误。
解决办法:DBUniit是通过jdbc的Connection对象来获取连接的,可以在URL上加上sessionVariables=foreign_key_checks=0来禁止外键约束检查。
public static Connection getConnection() throws SQLException { Connection con = null; con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sharing?sessionVariables=foreign_key_checks=0", "root", "yingjun"); return con; }
相关文章推荐
- jxl导出excel出现“文件错误,可能某些数据格式已丢失"
- 查看ADT版本,安装、卸载、更新eclipse中的ADT
- RTP错误----ERROR: Couldn't create the RTP or RTCP socket
- Cocos2Dx之动作Action
- 脑波设备mindwave数据流二次开发示例
- Vijava (更改虚拟机配置信息(内存、CPU和添加新磁盘)终极版本)
- Viewpager 的相关总结
- Ubuntu 设置NAT共享网络(命令行方法)
- 在Oracle 中使用CONNECT BY PRIOR START WITH 语句详解
- Apache Shiro框架简介
- CAA中选择元素过滤,总结...
- MongoDB复制集成员的重新同步
- Apache Shiro框架简介
- 中继器,集线器,交换机,路由器,网桥,网关的区别
- android-junit-report-1.5.8.jar的使用
- string -- value
- Android greenDao开源数据库框架
- asm 降级实验
- js 中的 prototype
- 字节流与字符流