gpt4 book ai didi

testing - 如何测试依赖于时间的方法?

转载 作者:行者123 更新时间:2023-11-28 21:33:27 25 4
gpt4 key购买 nike

测试时间相关方法的标准/推荐方法是什么?

举个例子:

我有一个类 Foo,它有一个方法 GetTimestamp() 并且 GetTimestamp() 应该在 中返回给定的时间始终按字典顺序(字母排序顺序)递增的字符串

在不为了测试目的而过度设计的情况下测试这个的最佳方法是什么?

我最初的想法是创建一个接受 IDateTimeProvider 的类构造函数,其唯一属性是 DateTime 属性,然后从单元测试中我可以创建一个虚拟 DateTimeProvider ...

这是一个简单的案例,但代表了我想知道的事情。

这还有很多其他应用,例如测试闰年前后的日期相关逻辑等。

最佳答案

我喜欢做的是在需要当前日期/时间的类中创建一个返回 DateTime ( Func<DateTime> ) 的公共(public)函数,并将其设置为返回 DateTime.Now默认情况下。然后,在测试期间,我注入(inject)了一个测试函数,该函数返回我想要测试的任何 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
}
}

关于testing - 如何测试依赖于时间的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10607848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com