0

時間依存のメソッドをテストするための標準的/推奨される方法は何ですか?

例として:

Fooメソッドを持つクラスがあり、GetTimestamp()常に辞書順 (アルファベット順) に増加GetTimestamp()する特定の時間を返す必要があります。string

テスト目的でオーバーエンジニアリングせずにこれをテストする最良の方法は何ですか?

IDateTimeProvider私の最初の考えは、唯一のプロパティがプロパティであるを受け入れるクラス コンストラクターを作成することでしたDateTime。その後、単体テストから、ダミーの DateTimeProvider を作成できました...

これは単純なケースですが、私が疑問に思っていることを表しています。

これには、うるう年の前後の日付依存ロジックのテストなど、他にも多くの用途があります。

4

2 に答える 2

1

私がやりたいのはFunc<DateTime>、現在の日付/時刻を必要とするクラスで DateTime ()を返すパブリック関数を作成し、DateTime.Nowデフォルトで返すように設定することです。次に、テスト中に、テストしたい DateTime を返すテスト関数を挿入します。

public class MyClass
{
    public Func<DateTime> DateTimeNow = () => DateTime.Now;

    public void MyMethod()
    {
        var currentTime = DateTimeNow();
        //... do work
    }
}

public class MyClassTest
{
    public void TesttMyMethod()
    {
        // Arrange
        var myClass = new MyClass();
        myClass.DateTimeNow = () => new DateTime(1999, 12, 31, 23, 59, 59);

        // Act
        myClass.MyMethod();

        // Assert
        // my asserts
    }
}
于 2015-07-10T23:24:01.583 に答える
0

これは良いリソースです:

.NET に IDateTimeProvider がなく、DateTime に Now getter があるのはなぜですか?

これはOKなアプローチのようです。

于 2012-05-15T20:00:29.407 に答える