Unitils / DBunit和数据库测试

时间:2011-04-19 08:11:20

标签: java unit-testing dbunit unitils

我想尝试使用DBUnit进行单元测试,但我的数据集存在问题。

这是我的持久性对象:

@Entity
@Table(name = "personnes")
public class Personne implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer pk;

    @Column
    private String name;
}

我的数据集:

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
    <personnes name="toto"  pk="1" />
</dataset>

我的问题是名称列,我收到此错误:

org.dbunit.dataset.NoSuchColumnException: personnes.NAME -  (Non-uppercase input column: name) in ColumnNameToIndexes cache map. Note that the map's column names are NOT case sensitive.

我不明白为什么dbunit搜索“NAME”列,而我的列是“name”。

感谢您的帮助。

4 个答案:

答案 0 :(得分:4)

我已经打了一段时间,并继续回到这个问题,但似乎还没有解决方案。

在Unitils 3.4.1中,他们添加了一个新属性org.dbunit.database.IMetadataHandler.implClassName

在我的unitils.properties文件中,我添加了以下行

org.dbunit.database.IMetadataHandler.implClassName=org.dbunit.ext.mysql.MySqlMetadataHandler

是的,我知道,根据Unitils&#39;网站,没有版本3.4.1,但你可以通过Maven获得最新版本。

link to issue report

答案 1 :(得分:0)

由于您没有在映射中指定列名,我猜基础ORM框架会为其生成列名“NAME”。

要解决此错误/警告,您可以将列名称添加到映射

@Column( name = "name")

导致小写列名称或在数据集中使用大写表示法

<personnes NAME="toto"  pk="1" />

保留大写列名。

答案 2 :(得分:0)

您需要将以下内容设置为true

DatabaseConfig.FEATURE_CASE_SENSITIVE_TABLE_NAMES
在您的DatabaseConfig对象中

请参阅org.dbunit.dataset.NoSuchTableException: Did not find table 'xxx' in schema 'null'

答案 3 :(得分:0)

尝试为数据库设置数据类型工厂。

此链接上可以找到所有可用的工厂。 http://dbunit.sourceforge.net/apidocs/org/dbunit/dataset/datatype/IDataTypeFactory.html

选择属于您的数据库的工厂。

在测试类中实现方法setUpDatabaseConfig并设置工厂。

protected void setUpDatabaseConfig(DatabaseConfig config) {
   config.setProperty( DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new OracleDataTypeFactory() );
}