2011-01-04 4 views
3

私たちは開発/ QAを行うときに、現在の日付/時刻が現在以外のものであるとふりをすることがよくあります。私たちが日付に依存する何らかのロジックを持つのはかなり一般的です。DateTime.Nowを無効にする

簡単な例:2010年12月15日から2011年1月3日の間に店舗内の製品が利用可能であるとします。これらの2つの日付はDBに格納され、コードはDateTime.Nowと比較されます。これは明らかに何らかの形でテストされる必要があります。質問はどうですか?

は、これまでのところ、私たちはちょうどカスタムDateオブジェクトを追加し、現在の日付に依存することができ、また、超ラメ感じている第三者のコードをカバーしていない代わりにDateTime.NowDate.Nowを、使用して強制しようとしました。

Windowsのシステム日付を変更することなく、日付のオーバーライドを処理するもう少しコーシャーな方法があるのだろうか。

答えて

12

を呼び出す必要がある私は、Microsoft MolesであなたにDateTime.Nowに電話を代わっうアイソレーションフレームワークを見てみるために、あなたをお勧めしますあなたが望む任意の日付を返すことができる自分の代理人。

+0

私はこれがより良いのが好きです。セットアップ作業は何ですか? VSプロジェクトなしでこれを使用できますか? –

+0

セットアップは簡単で、ドキュメントも用意されています。 VSプロジェクトなしで実行すると、正確にはどういう意味ですか? Molesを使用する単体テストをコンパイルする必要があります。単体テストを動作させるには、単体テストをMolesプロファイラで実行する必要があります。 –

+0

私はこれを言い換えることができます。 MolesをMbUnitまたはNUnitで使用できますか? –

-1

純粋な.NETの方法はありません、あなたはユニットテストのためにWin32SetSystemTime function using pinvoke

+0

残念なことに、開発はWebコンテキストで行われるため、これはオプションではないため、同じサーバーで数十件のアプリケーションが実行され、そのうちの特定のものだけが影響を受ける必要があります。 –

+0

システム時間を変更すると、特に他のプログラム/アプリケーションとの組み合わせで負の副作用が発生する可能性があることに注意してください。 – Bobby

関連する問題