Unitils / DBunit и тестирование базы данных - PullRequest
4 голосов
/ 19 апреля 2011

Я хочу попробовать выполнить модульный тест с 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».

Спасибо за вашу помощь.

Ответы [ 4 ]

4 голосов
/ 12 ноября 2014

Я боролся с этим некоторое время и продолжаю возвращаться к этой проблеме, которая, похоже, пока не имеет решения.

В 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.

ссылка на отчет о проблеме

0 голосов
/ 21 марта 2012

Вам необходимо установить значение true

DatabaseConfig.FEATURE_CASE_SENSITIVE_TABLE_NAMES

в вашем DatabaseConfig объекте.

См. org.dbunit.dataset.NoSuchTableException: не найдена таблицаxxx 'в схеме' null '

0 голосов
/ 24 июля 2013

Попробуйте установить фабрику типов данных для ваших баз данных.

Все доступные фабрики можно найти по этой ссылке. 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() );
}
0 голосов
/ 06 июля 2011

Поскольку вы не указываете имя столбца в отображении, я предполагаю, что базовая структура ORM генерирует для него имя столбца "NAME".

Чтобы устранить эту ошибку / предупреждение, вы можете добавить имя столбца в отображение

@Column( name = "name")

, приводящее к имени столбца в нижнем регистре или использование записи в верхнем регистре в вашем наборе данных

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

оставляя имя столбца в верхнем регистре.

...