日期:2014-05-16  浏览次数:20713 次

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

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

? ?但是如果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;
	}

?

?

?

?