DateTime.Now
インターフェイスの背後にあるプロパティへのアクセスをカプセル化するだけです。
public interface IDateTimeProvider
{
DateTime Now { get; }
}
コードでは、次のような実装を使用します。
public class DateTimeProvider : IDateTimeProvider
{
public DateTime Now { get { return DateTime.Now; } }
}
IDateTimeProvider
また、テストの場合は、テスト クラスを作成するか、モック フレームワークを使用してモックするだけです。
このインターフェイスを依存性注入などの手法で使用すると、実行時であってもサービスの動作を簡単に変更できます。
IDateTimeProvider
たとえば、常に数時間オフの を作成できます。
public class AlwaysToLateDateTimeProvider : IDateTimeProvider
{
public DateTime Now { get { return DateTime.Now.AddHours(-2); } }
}
または、ファイル、データベース、パイプなどから「モック」日時を読み取る実装を作成します。
テスト中は、これらの実装のいずれかを使用するようにサービスを構成し、ライブ モードで実行している間は、「正しい」日時を返す通常の実装を使用するように依存性注入を構成します。
もちろんTypeMock Isolatorもあります...
Isolate.WhenCalled(() => DateTime.Now).WillReturn(new DateTime(2008, 1, 1));