これを実現する最も簡単な方法は、システム クロックを「テスト時間」に変更し、テストを実行してから元に戻すことです。それはかなりハックで、あまりお勧めしませんが、うまくいきます。
より良い方法はDateTime.Now
、静的な値を注入するか、テストのために取得した値を操作できるようにする抽象化を使用することです。テスト値を静的なスナップショットのままにするのではなく、「ティック」したい場合は、TimeSpan
「現在」に を追加するのが最も簡単です。
したがって、「オフセット」と呼ばれるアプリケーション設定を追加して、TimeSpan
<appSettings>
<add key="offset" value="00:00:00" />
</appSettings>
そして、DateTime.Now
取得するたびにこの値を追加します。
public DateTime Time
{
get
{
var offset = TimeSpan.Parse(ConfigurationManager.AppSettings["offset"]);
return DateTime.Now + offset;
}
}
offset
これを 1 時間 20 分後に実行するには、値を調整するだけです
<add key="offset" value="01:20:00" />
理想的には、インターフェイスを作成してDateTime
依存性注入を実装しますが、その目的のためには (それが望ましいですが)、これによって開くワームの缶が混乱の世界を生み出すことをお勧めします。これは簡単で、うまくいきます。