データベーステーブルで現在の「処理期間」を検索するメソッドを使用して、サービスの統合テストを作成しようとしています。ただし、アクティブな処理期間が常に存在するとは限らないため、メソッドは null を返す場合があります (処理が行われない週もあります)。このメソッドの JUnit テストを書きたいのですが、常に値が返されるとは限らないため、テストをいつ実行するかによって異なる結果が得られます。
period オブジェクトとサービスは次のようになります。
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 が有効であることを確認するために、データベースに対して実際にクエリを実行したいと考えていました。