.NETにモックライブラリがありますか?moqなど、モックライブラリが私にとって問題ないシステム時間をモックすることができますか?.NETにはシステム時間を模擬できるモックライブラリはありますか?
答えて
ありDateTime.Now
のようなものを模擬することができますTypeMock IsolatorまたはMicrosoft Fakesのようなツールがありますが、それらは(TypeMockアイソレーターのためにあなたは、少なくとも「エッセンシャル」版を必要とし、MS偽物のためには、Visual Studioのエンタープライズを必要とする)無料ではないです。
しかし、あなたは本当にそれを必要としません。 DateTime.Now
を嘲笑するのではなく、その上に抽象化を作成することができ、その抽象化を嘲笑することができます。 ITimeService
の "本当の" 実装がただDateTime.Now
を返します
public class MyClass
{
private readonly ITimeService _timeService;
public MyClass(ITimeService timeService)
{
_timeService = timeService;
}
public int GetCurrentYear()
{
return _timeService.Now.Year;
}
}
:
public interface ITimeService
{
DateTime Now { get; }
}
代わりにコード内で直接DateTime.Now
を使用しての、ITimeService
のインスタンスを注入:このような何か。あなたの単体テストでは、どんなモッキングフレームワーク(FakeItEasy、Moq、NS substitute ...)でもあなたがコントロールするモックタイムサービスを作ることができます。例えば、FakeItEasyを使用して:彼らは独断回答やスパムを誘致する傾向があるよう
// Arrange
var timeService = A.Fake<ITimeService>();
A.CallTo(() => timeService.Now).Returns(new DateTime(1969, 7, 21));
var myClass = new MyClass(timeService);
// Act
var year = myClass.GetCurrentYear();
// Assert
year.Should().Be(1969);
インタフェースを追加する必要があるので、ソースコードの変更が必要ですか? –
@AdamLee依存性注入をすでに使用しているのであれば、それほど大きな変更ではありません。とにかく、 'DateTime.Now'を嘲笑するには、私が言及した高価なツールを買うのに足りないコード変更が必要です。別の方法として、静的な読み書き可能な 'TimeService.Now'プロパティを使用する方法があります。これは、コードの変更が少ないことを意味しますが、グローバルな状態を導入するため、あまりクリーンではありません。テストを並行して実行することはできません。 –
- 1. 模擬遅延の可能性はありますか?
- 2. feignクライアントの模擬実装はオートワイヤではありません
- 3. アトリビュートディレクティブをAngular2 +で模擬することはできますか?
- 4. Pythonで待ちライブラリを模擬する方法はありますか?
- 5. PHPUnitで外部Webリクエストを模擬する方法はありますか?
- 6. Grailsでは、Jodaの時間を使って現在の時間を模擬する良い方法がありますか?
- 7. データ接続を模擬する必要があります
- 8. このクラスを模擬するには?
- 9. バッチシミュレーションゲームで時間システムを作るには?
- 10. NativeScript - ユニットテスト時に模擬ライブラリをインポートできない
- 11. 大規模なDOMでクロムイベントトリガーに時間がかかります
- 12. .NET COREのテスト - 模擬IHttpContextAccessor with FakeItEasy
- 13. .NETの非仮想メソッドの模擬/スタブ
- 14. .Netコアユニットテスト - 模擬テスト<T>
- 15. は、システム時間から
- 16. あなたはどのようにasp.net mvcでキャッシュオブジェクトを模擬しますか?
- 17. PHPUnitでインタフェース実装を模擬することはできますか?
- 18. 模擬サービスと日付時間でテストがランダムに失敗する
- 19. Reactコンポーネントをテストする前にDOMを模擬する方法はありますか?
- 20. 時間帯はありますか?
- 21. オブジェクト属性を模擬する方法、私はアクセスできませんか?
- 22. 'out'パラメータを模擬する方法は?
- 23. AspectJクラスを模擬する方法は?
- 24. Nettyを模擬する方法は?
- 25. 辞書を模擬する方法は?
- 26. 時間配列を時間順にソートする方法はありますか?
- 27. あなたはどのようにActivatedRouteを模擬しますか
- 28. ユニットテストでアンドロイドサービスを模擬することは可能ですか?
- 29. 誰もが.NETでSocketクラスをうまく模擬しましたか?
- 30. 時間は24時間表示ではありません
質問がオフトピックスタックオーバーフローのためにある書籍、ツール、ソフトウェアライブラリ、チュートリアルや他のオフサイトのリソースをお勧めしますか見つけるために私たちを求めて。代わりに、問題を説明し、それを解決するためにこれまでに何が行われているかを記述します。 –
私はこの質問は話題にはならないと意見を異にします。 OPは非常に特殊な機能を求めています。それが異なって言われた場合、例えば。 "どのように私は.NETでシステム時間を模擬することができます"、誰も話題を外すように投票することを考えることはありません。たぶん、この質問は、手紙の "ツールなしの勧告"ルールを破るが、精神ではない。 –
@Adam Lee、私は、あなたの質問をThomas Levesqueとして言い換えることをお勧めします。 –