1

システムがnservicebusタイムアウトを使用して、24時間ごとにイベントをトリガーするプロジェクトに取り組んでいます。単体テストを通じて、24時間「偽造」して、いつでもテストを実行できるようにして、テストが実行されるまで1日待つ必要がないようにすることは可能ですか。

オーバーライドされたタイムアウト-メソッドは次のようになります。

public override void Timeout(object state)
{
ExportFileGenerator.GenerateFile(_entryDataStore.GetEntriesOlderThan(DateTime.Now));
RequestUtcTimeout(TimeSpan.FromHours(TimeLeftToDailyJob()), "");
}
4

2 に答える 2

3

私はここでこれを行う方法についてブログを書きました:

http://www.udidahan.com/2012/02/27/nservicebus-saga-tips/

于 2012-06-11T18:38:47.030 に答える
1

時間関連のサービスへの依存関係を抽出することでそれを行うだけです(あなたの場合、それはTimeLeftToDoDailyJobメソッドになります)。

これを実現するには、基本的に2つの方法があります。

  • メソッドを仮想化し、そのメソッドが非常に小さい(気付かない)値を返すようにして、クラスのテスト可能なバージョンを準備します
  • そのメソッドを抽出して新しいクラスを作成し、テストしたクラスへの依存性などのクラスのインスタンスを注入します(コンストラクター注入による制御の反転)

通常、より分離された設計を強制するため、2番目のアプローチを選択します。これにより、コードの複雑さが軽減され、その結果、テストが容易になります。

于 2012-06-11T06:48:26.207 に答える