0

今日、次の週、前の年などの日付でレコードを取得するいくつかのクエリの動作を確認するテスト ケースを作成する必要があります。

基本的にはjunitテストケースで、次の方法で実装しています:

1.TODAY、NEXT_WEEK、PREVIOUS_YEARに対応する日付のレコードを挿入する

2.したがって、特定のクエリについて、返されるレコードが何であるかがわかります。クエリを実行し、特定の条件のレコードを取得して、正しいレコードをチェックします。

この手順では、TODAY のケースを実行しているときに、問題に直面しています。

テスト ケースを真夜中 (11.59 など) までに実行すると、最初のデータの挿入が行われ、24-4-2012T11:59:00.00 などの日付が挿入されます。

クエリの実行前は、日付は明日、つまり 25-4-2012T00:00:00.00 になります。

TODAY 条件は、24 日ではなく 25 日でクエリを実行します。したがって、私のテストケースは失敗します。

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

5

この問題を解決するにはどうすればよいですか?

もっとテスト可能なコードを書いてください:)

私の推測ではSystem.currentTimeMillis()、 、Calendar.getInstance()または同様のものを使用して「現在の日付」を取得していると思います。そのコードを簡単に傍受して「必要な値」を与えることはできません。代わりに、使用したい「今」の表現を返すClock単一のメソッド (または同様のもの) を持つインターフェイスを導入します。now()(個人的にはJoda TimeInstantから使用しますが、それはあなた次第です。)

次に、テストするコードにa を挿入Clockします (たとえば、パラメーター コンストラクターとして)。テストには、必要なものを返すスタブ実装を使用します。本番環境では、「実際の」実装を使用してください。

于 2012-04-24T06:19:30.343 に答える
0

たとえば、new Date()今日の概念に使用するとします。比較のために日付を保存する必要があります。これが問題の根本であると思います。テスト可能/検証可能にするには、クエリ実行の前後に期待値を保持する必要があります。

Date today = new Date();

// update the data layer using today

Date recordedDate = // fetch the date that is recorded

assertEquals(today, recordedDate);

java.util.Calendarおそらく、質問で言及された時点を計算するなど、他の機能を使用するでしょう。

于 2012-04-24T06:21:03.673 に答える