2010-05-18 9 views
13

Zastanawiam się, czy istnieje sposób na określenie na przykład jutro jako data w zbiorze danych DBUnit XML. Czasami logika kodu jest różna dla dat w przyszłości i dat w przeszłości i chcę przetestować oba przypadki. Na pewno mogę podać coś podobnego do 5 listopada 2239 i mieć pewność, że test będzie działał do tej daty, ale jest bardziej elegancki sposób.Data w stosunku do bieżącego zestawu danych DBUnit

Jeszcze nie spotkałem się z taką sytuacją podczas mojego rozwoju Java, ale gdy miałem już doświadczenie, gdy logika kodu była inna dla jednego dnia przed datami, dwa dni przed datami i więcej niż dwa dni przed datami. W tym przypadku jedynym możliwym rozwiązaniem do napisania testu opartego na bazie danych jest wstawienie względnych dat podczas importu danych.

Czy są w tym celu dostępne narzędzia DBUnit?

Odpowiedz

24

Właśnie zacząłem używać DBUnit i szukałem podobnych możliwości. Niestety wydaje się, że nie ma języka wyrażeń dla dat w ramach. Jednak znalazłem odpowiednie obejście, używając klasy ReplacementDataSet DBUnit. Ta klasa pobiera obiekt IDataSet i udostępnia metody zastępowania obiektów wyodrębnionych przez obiekt IDataSet z plików zestawu danych.

zbiór danych

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

kod źródłowy

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)); 

Teraz, gdy badanie przebiega Creation dane użytkownika będą zawsze ustawione na dwa dni przed uruchomieniem testu.

Mam nadzieję, że to pomoże. Powodzenia.

+0

Dzięki za tak szczegółowe wyjaśnienie. To naprawdę przydatne. – VestniK

+0

Co powiesz na używanie unitils @Dataset? – mjgirl

0

Można użyć add() of Calendar do zdefiniowania dat w przyszłości i użycia go w odniesieniu do źródła danych dla JUnit. Wątpię, żeby działało to z formatem XML DBUnit. Może to być twoja własna TestCase, która rozciąga się od DBTestCase i implementuje metodę getDataSet().

+0

Tak, wiem jak obliczyć względny dzień w Javie. Wygląda na to, że naprawdę potrzebuję parsować zestaw danych i obliczać daty ręcznie. – VestniK

Powiązane problemy