Unitils/DBunit и тестирование базы данных
Я хочу попробовать выполнить модульный тест с 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 ищет столбец "ИМЯ", а мой столбец - "имя".
Спасибо за вашу помощь.
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.
Вам необходимо установить следующее значение true
DatabaseConfig.FEATURE_CASE_SENSITIVE_TABLE_NAMES
в вашем DatabaseConfig
объект.
См. Org.dbunit.dataset.NoSuchTableException: не удалось найти таблицу 'xxx' в схеме 'null'
Поскольку вы не указываете имя столбца в отображении, я предполагаю, что базовая структура ORM генерирует для него имя столбца "NAME".
Чтобы устранить эту ошибку / предупреждение, вы можете добавить имя столбца в отображение
@Column( name = "name")
приводя к имени столбца в нижнем регистре или используйте запись в верхнем регистре в вашем наборе данных
<personnes NAME="toto" pk="1" />
оставляя имя столбца в верхнем регистре.
Попробуйте установить фабрику типов данных для ваших баз данных.
Все доступные заводы можно найти по этой ссылке. 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() );
}