簡體   English   中英

Unitils / DBunit和數據庫測試

[英]Unitils/DBunit and database test

我想嘗試使用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”。

謝謝你的幫助。

我已經打了一段時間了,並繼續回到這個問題,但似乎還沒有解決方案。

在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獲得最新版本。

鏈接到問題報告

嘗試為數據庫設置數據類型工廠。

所有可用的工廠都可以在此鏈接上找到。 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() );
}

由於您沒有在映射中指定列名,我猜基礎ORM框架會為其生成列名“NAME”。

要解決此錯誤/警告,您可以將列名添加到映射中

@Column( name = "name")

導致小寫列名稱或在數據集中使用大寫表示法

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

保留大寫列名。

您需要將以下內容設置為true

DatabaseConfig.FEATURE_CASE_SENSITIVE_TABLE_NAMES

DatabaseConfig對象中。

請參閱org.dbunit.dataset.NoSuchTableException:未在架構中找到表'xxx''null'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM