![](/img/trans.png)
[英]NullPointerException while running unit test against Postgres database with Unitils
[英]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.