タイマーを使ってテスト対象のテストをしているときに、一定の時間間隔で何らかのアクションを実行すると、それをテストする良い方法はありますか?ユニットテストのTimed-intervalアクションがThread.Sleepと悪いですか?
1つのmethodは、タイマーをインターフェイスにラップし、それを依存関係として注入することです。
しかし、もう1つの抽象化を避けたいと思います。それは、タイマーではなく更新間隔を注入することで回避できるようです。私のテスト(AAAスタイルのテストを前提とする)で、の後にThread.Sleep
を入力します。とアサートの間で、テストに時間がかかりません。
これは悪い考えですか?おそらくTDDの原則に完全に従っているわけではないことは分かっていますが、契約をしてすべてを取り巻くことを止めて注入する行がなければならないようです。
"契約書と注射ですべてを取り囲む行がある必要があります" - Heresy、私の意見;) –
Windowsのスレッドのスケジューリングは確定的ではないので、このようなことをするとテストが失敗する可能性があります無作為に。 – svick
@svick私は実際にスレッドのスケジューリングについては何もチェックしようとしていません。ちょうど私のタイマーは正常に機能コールが予定された期間+わずかな猶予期間内に発生するようにします。そのような状況は、まだそのような問題に脆弱ではないでしょうか? –