14

たとえば、DBUnitXMLデータセットで明日を日付として指定する方法があるかどうか疑問に思っています。将来の日付と過去の日付でコードロジックが異なる場合があり、両方のケースをテストしたいと思います。確かに、2239年11月5日のようなものを指定して、テストがこの日付まで機能することを確認できますが、よりエレガントな方法があります。

私はJava開発中にこのような状況にまだ直面していませんが、コードロジックが日付の前日、日付の2日前、日付の2日以上前で異なっていた経験があります。この場合、データベース駆動型テストを作成するための唯一の可能な解決策は、データのインポート中に相対的な日付を挿入することです。

このためにDBUnitが提供する機能はありますか?

4

4 に答える 4

25

DBUnitを使い始めたばかりで、同様の機能を探していました。残念ながら、フレームワークには日付の表現言語がないようです。ただし、DBUnitのReplacementDataSetクラスを使用して適切な回避策を見つけました。このクラスは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));

これで、テストが実行されると、ユーザーの作成データは常にテストが実行される2日前に設定されます。

お役に立てれば。幸運を。

于 2010-06-18T18:37:23.903 に答える
2

DbUnit 2.7.0 で新しい相対日付/時刻構文が追加され、[now+1d]追加の設定なしで明日の日付を設定するように記述できるようになりました。

<dataset>
  <user create_date="[now+1d]"/>
<dataset>

ドキュメントはこちら:
http://dbunit.sourceforge.net/datatypes.html#relativedatetime

ドキュメントからのいくつかの例:

  • [今] : 現在の日時
  • [now-1d] : 昨日同時刻
  • [now+1y+1M-2h] : 今日から 1 年 1 か月、2 時間前
  • [now+1d 10:00] : 明日の10時
于 2020-04-28T14:55:20.720 に答える
0

Calendar の add() を使用して将来の日付を定義し、これを JUnit のデータソースとの関係で使用できます。これが DBUnit の XML 形式で機能するとは思えません。DBTestCase を拡張して getDataSet() メソッドを実装する独自の TestCase を作成することもできます。

于 2010-05-18T12:01:42.367 に答える