2011-04-19 41 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