将DbUnit与没有主键的表一起使用

mip*_*mip 7 java junit dbunit

我正在尝试设置我的单元测试环境以使用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"));在这个实例中重写 ?

非常感谢任何建议.

slu*_*shi 6

您需要确保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}条目设置地图.