【问题标题】:Unitils/DBunit and database testUnitils/DBunit 和数据库测试
【发布时间】:2011-04-19 08:11:19
【问题描述】:

我想尝试使用 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”。

感谢您的帮助。

【问题讨论】:

标签: java unit-testing dbunit unitils


【解决方案1】:

我一直在与这个问题作斗争,并不断回到这个问题上,似乎还没有解决方案。

在 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

【讨论】:

  • 这个答案应该被接受,因为这是唯一有意义的答案。
【解决方案2】:

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

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

@Column( name = "name")

在数据集中生成小写的列名或使用大写表示法

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

保留大写的列名。

【讨论】:

    【解决方案3】:

    您需要将以下设置为true

    DatabaseConfig.FEATURE_CASE_SENSITIVE_TABLE_NAMES
    

    在您的 DatabaseConfig 对象中。

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

    【讨论】:

      【解决方案4】:

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

      所有可用的工厂都可以在这个链接上找到。 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() );
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-06
        • 2015-09-26
        • 1970-01-01
        • 2016-09-04
        • 1970-01-01
        • 2016-02-02
        • 1970-01-01
        相关资源
        最近更新 更多