2010-05-18 10 views
13

Ich frage mich, ob es gibt eine Möglichkeit, zum Beispiel morgen als Datum im DBUnit XML-Dataset anzugeben. Manchmal unterscheidet sich die Code-Logik für Daten in der Zukunft und Daten in der Vergangenheit und ich möchte beide Fälle testen. Sicher kann ich etwas wie den 5. November 2239 angeben und sicher sein, dass der Test bis zu diesem Datum funktioniert, aber es gibt elegantere Weise.Datum relativ zu der aktuellen in der DBUnit-Datenmenge

Ich habe noch keine solche Situation während meiner Java-Entwicklung konfrontiert, aber einmal hatte ich Erfahrung, wenn Code Logik für einen Tag vor Daten, zwei Tage vor Daten und mehr als zwei Tage vor Daten unterschiedlich war. In diesem Fall besteht die einzige mögliche Lösung zum Schreiben eines datenbankbasierten Tests darin, relative Daten während des Datenimports einzufügen.

Gibt es dafür von der DBUnit irgendwelche Einrichtungen?

Antwort

24

Ich begann gerade mit DBUnit und suchte nach ähnlichen Fähigkeiten. Leider scheint es keine Ausdruckssprache für Datumsangaben im Framework zu geben. Ich habe jedoch eine geeignete Problemumgehung mithilfe der Ersetzungsdatensatzklasse von DBUnit gefunden. Diese Klasse verwendet ein IDataSet-Objekt und stellt Methoden zum Ersetzen von Objekten bereit, die vom IDataSet-Objekt aus den Datendateien extrahiert wurden.

Dataset

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

Quellcode

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

Wenn nun der Test der Erstellungsdaten des Benutzers ausgeführt wird immer auf zwei Tage eingestellt werden, bevor der Test durchgeführt wurde.

Hoffe, das hilft. Viel Glück.

+0

Danke für diese detaillierte Erklärung. Es ist wirklich nützlich. – VestniK

+0

Wie wäre es, wenn Sie untils @Dataset verwenden? – mjgirl

0

Sie können add() of Calendar verwenden, um Daten in der Zukunft zu definieren und diese in Beziehung mit Datenquelle für JUnit zu verwenden. Ich bezweifle, dass dies mit dem XML-Format von DBUnit funktionieren würde. Möglicherweise erstellen Sie Ihre eigene Testfalldatei, die von DBTestCase ausgeht und die Methode getDataSet() implementiert.

+0

Ja, ich weiß, wie man den relativen Tag in Java berechnet. Es sieht so aus, als müsste ich das Dataset wirklich analysieren und die Daten manuell berechnen. – VestniK

Verwandte Themen