我正在尝试设置我的单元测试环境以使用DbUnit.
我遇到了一些问题,因为我试图控制的表没有主键.我得到了一个org.dbunit.dataset.NoPrimaryKeyException.
我按照这里的步骤http://dbunit.wikidot.com/noprimarykeytable但我该如何使用:
connection.getConfig().setProperty("http://www.dbunit.org/properties/primaryKeyFilter", new MyPrimaryKeyFilter("A1"));
Run Code Online (Sandbox Code Playgroud)
对于我的每张桌子?
例如,我有以下数据库:
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>
Run Code Online (Sandbox Code Playgroud)
如何connection.getConfig().setProperty("http://www.dbunit.org/properties/primaryKeyFilter", new MyPrimaryKeyFilter("A1"));在这个实例中重写 ?
非常感谢任何建议.
您需要确保MyPrimaryKeyFilter处理架构中的所有表.在示例中,只有一个表,因此提供的简单过滤器类工作正常.在您的情况下,我可能会更改该类以获取包含表的Map - > pk列名称映射:
class MyPrimaryKeyFilter implements IColumnFilter {
private Map<String, String> pseudoKey = null;
MyPrimaryKeyFilter(Map<String, String> pseudoKey) {
this.pseudoKey = pseudoKey;
}
public boolean accept(String tableName, Column column) {
return column.getColumnName().equalsIgnoreCase(pseudoKey.get(tableName));
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用{NO_PK1 - > A1},{NO_PK2 - > B1}和{NO_PK3 - > C1}条目设置地图.
| 归档时间: |
|
| 查看次数: |
6260 次 |
| 最近记录: |