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?

听起来这是一个不错的方法。

于 2012-05-15T20:00:29.407 回答