私は、データベーステーブルの現在の「処理期間」を検索する方法でサービスの統合テストを作成しようとしています。ただし、常にアクティブな処理期間であるとは限りません。したがって、このメソッドはnullを返す可能性があります(処理が発生しない週があります)。このメソッドのJUnitテストを記述したいと思いますが、常に値を返すわけではないので、テストをいつ実行するかによって異なる結果が得られます。テスト時間依存サービスメソッド
期間オブジェクトおよびサービスは、次のようになります。
public interface ProcessingPeriod {
int getSeqno();
Date getStart();
Date getEnd();
}
public class PeriodService {
/* Look up the current period; if not currently in a period, return null */
public ProcessingPeriod getCurrentPeriod() { /* execute a sql query */ }
/* Look up the current period; if not currently in a period, get the next upcoming period */
public ProcessingPeriod getCurrentOrNextPeriod() { /* execute a sql query */ }
/* Look up the current period; if not currently in a period, get the most recent period */
public ProcessingPeriod getCurrentOrPreviousPeriod() { /* execute a sql query */ }
}
PeriodService
のインスタンスは、Springアプリケーションコンテキストによって管理され、私のJUnitテストは、テスト・コンテキストを構築し、するサービスオブジェクトを提供するために、SpringJUnit4ClassRunner
を使用していますテスト。私のJUnitテストは、現在のようになります。
@Test
public void testGetCurrentPeriod() {
ProcessingPeriod period = service.getCurrentPeriod();
if (period != null) {
Date now = new Date();
assertThat(period.getStart(), lessThanOrEqualTo(now));
assertThat(period.getEnd(), greaterThanOrEqualTo(now));
}
}
しかし、テストは処理期間中に実行されていない場合、多くを助けるために起こっているように、それはいないようです。 getCurrentPeriod
メソッドが実際にデータベースから適切な期間を取得していることを有意義にテストするにはどうすればよいですか?私はデータベースを嘲笑すべきですか?また、実際にSQLを有効にするためにデータベースに対してクエリを実行したいと思っていました。
nullを返し書き込みコードが無いないと見なされていない理由の例を本番コードをリファクタリングする必要がありますように
が見えます。 ;-) –
関連する可能性のある質問:http://stackoverflow.com/questions/9731526/how-to-test-a-feature-that-depends-on-date-events-happen、http://stackoverflow.com/質問/ 2284279 /現在の日付に依存するテストロジックの方法、http://stackoverflow.com/questions/5092017/junit-with-new-date – k3b
いつもより良いテストを実行するサンプル・テスト・データを使用して、セットアップでテストを実行する前にテスト・データを作成し、テストを実行して、最後にそれらのレコードを削除します。 –