2011-04-19 88 views
4

我想尝试使用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”,而我的列是“名称”。

感谢您的帮助。

+0

我有这个问题。你的问题可能与这个错误,这显然已经存在相当一段时间... https://unitils.atlassian.net/browse/UNI-134 – Luke 2012-10-12 20:39:17

回答

0

由于您没有在映射中指定列名,我猜测底层ORM框架会为它生成列名“NAME”。

要解决此错误/警告,你可以在列名添加到映射

@Column(name = "name") 

导致小写列名或在数据集中使用大写符号

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

留下大写字母的名称。

+0

我试过这个,但没有改变 – Kiva 2011-07-06 10:18:04

+0

然后,我已经出去的想法。 :( – rudolfson 2011-08-29 06:59:51

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()); 
} 
4

我一直在争取这一段时间,并不断回到这个问题,似乎还没有解决方案。

在Unitils 3.4.1,他们增加了新的属性,org.dbunit.database.IMetadataHandler.implClassName

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

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

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

link to issue report

+0

这个答案应该被接受,因为它是唯一有意义的。 – rpvilao 2015-01-29 15:34:28