我试图设置我的单元测试环境以使用DbUnit。对没有主键的表使用DbUnit
我有几个问题,因为我试图控制的表没有主键。我一直在获得org.dbunit.dataset.NoPrimaryKeyException
。
我已经在这里遵循的步骤http://dbunit.wikidot.com/noprimarykeytable但我要如何使用:
connection.getConfig().setProperty("http://www.dbunit.org/properties/primaryKeyFilter", new MyPrimaryKeyFilter("A1"));
我的每个表的?
例如,我有以下数据库:
CREATE TABLE `NO_PK1` (
`A1` int(11) NOT NULL,
`A2` varchar(50) default NULL
);
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<NO_PK1 A1="1" A2="Test1" />
<NO_PK1 A1="2" A2="Test2" />
<NO_PK1 A1="3" />
</dataset>
CREATE TABLE `NO_PK2` (
`B1` int(11) NOT NULL,
`B2` varchar(50) default NULL
);
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<NO_PK2 B1="1" B2="Test1" />
<NO_PK2 B1="2" B2="Test2" />
<NO_PK2 B1="3" />
</dataset>
CREATE TABLE `NO_PK3` (
`C1` int(11) NOT NULL,
`C2` varchar(50) default NULL
);
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<NO_PK3 C1="1" C2="Test1" />
<NO_PK3 C1="2" C2="Test2" />
<NO_PK3 C1="3" />
</dataset>
如何在这种情况下改写connection.getConfig().setProperty("http://www.dbunit.org/properties/primaryKeyFilter", new MyPrimaryKeyFilter("A1"));
?
非常感谢您的任何建议。
谢谢slushi。这就说得通了。如果其中一个表有一个由多个字段组成的密钥呢? – mip 2012-02-06 13:40:33
我认为你可以将地图改成地图<字符串,设置>并做一个包含检查。 –
slushi
2012-02-06 21:53:57
所以return语句变成'return pseudoKey.get(tableName).contains(column.getColumnName());'? – mip 2012-02-07 09:18:21