Дата относительно текущего в наборе данных DBUnit - PullRequest
13 голосов
/ 18 мая 2010

Мне интересно, есть ли способ указать, например, завтра как дату в наборе данных DBUnit XML. Иногда логика кода отличается для дат в будущем и дат в прошлом, и я хочу проверить оба случая. Конечно, я могу указать что-то вроде 5 ноября 2239 года и быть уверенным, что тест будет работать до этой даты, но есть более элегантный способ.

Я еще не сталкивался с такой ситуацией во время разработки Java, но однажды у меня был опыт, когда логика кода отличалась за один день до даты, за два дня до даты и более чем за два дня до даты. В этом случае единственно возможным решением для написания теста на основе базы данных является вставка относительных дат во время импорта данных.

Есть ли какие-либо возможности, предоставляемые DBUnit для этого?

Ответы [ 2 ]

24 голосов
/ 18 июня 2010

Я только начал использовать DBUnit и искал аналогичные возможности. К сожалению, в фреймворке, похоже, нет языка выражения для дат. Тем не менее, я нашел подходящий обходной путь, используя класс ReplacementDataSet DBUnit. Этот класс принимает объект IDataSet и предоставляет методы для замены объектов, извлеченных объектом IDataSet из файлов набора данных.

набор данных

<dataset>
    <user first_name="Dan"
          last_name="Smith"
          create_date="[create_date]"/>
<dataset>

исходный код

String dataSetFile = "testDataFile.xml";
IDataSet dataSet = new FlatXmlDataSetBuilder().build(new FileInputStream(dataSetFile));
ReplacementDataSet rDataSet = new ReplacementDataSet(dataSet);
Set<String> keys = dataSetAdjustments.keySet();
rDataSet.addReplacementObject("[create_date]", DateUtils.addDays(new Date(), -2));

Теперь, когда тест запускается, данные о создании пользователя всегда будут установлены за два дня до запуска теста.

Надеюсь, это поможет. Удачи.

0 голосов
/ 18 мая 2010

Вы можете использовать add () Календаря , чтобы определить даты в будущем и использовать это в связи с источником данных для JUnit. Я сомневаюсь, что это будет работать с форматом DBUnit XML. Может быть, вы создадите свой собственный TestCase, который выходит из DBTestCase и реализует метод getDataSet ().

...