测试时间相关方法的标准/推荐方法是什么?
举个例子:
我有一个类Foo
,其方法GetTimestamp()
和GetTimestamp()
应该返回string
中的给定时间,该时间总是按字典顺序增加(按字母顺序排序)。< / p>
没有过度工程用于测试目的,测试这个的最佳方法是什么?
我最初的想法是创建一个类构造函数,它接受IDateTimeProvider
,它的唯一属性是DateTime
属性,然后从单元测试我可以创建一个虚拟的DateTimeProvider ...
这是一个简单的案例,但代表了我所想知道的。
这有很多其他应用程序,例如测试闰年的日期相关逻辑等。
答案 0 :(得分:1)
我喜欢做的是创建一个公共函数,该函数在需要当前日期/时间的类中返回DateTime(Func<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
}
}
答案 1 :(得分:0)