C# 基于时间计算的自动化单元测试

C# 基于时间计算的自动化单元测试,c#,visual-studio-2010,unit-testing,tdd,C#,Visual Studio 2010,Unit Testing,Tdd,我有一个小项目,它使用符号、价格、时间等输入对交易进行一些统计计算,我使用的是Visual Studio单元测试工具,如果我对一个类/函数进行正常测试,而该类/函数没有及时返回/返回,这就足够了 我有一些统计公式需要计算,比如移动平均线。这可能需要根据“1分钟”的时间间隔计算5次。因此,我必须保留每分钟的最后一个值(我已将其放入逻辑中),并在第5分钟内对最后一个值进行平均 现在的问题是,运行单个测试(通过放置Thread.Sleep)会损失5分钟。有没有一种有效的方法来测试这种基于时间的函数/算

我有一个小项目,它使用符号、价格、时间等输入对交易进行一些统计计算,我使用的是Visual Studio单元测试工具,如果我对一个类/函数进行正常测试,而该类/函数没有及时返回/返回,这就足够了

我有一些统计公式需要计算,比如移动平均线。这可能需要根据“1分钟”的时间间隔计算5次。因此,我必须保留每分钟的最后一个值(我已将其放入逻辑中),并在第5分钟内对最后一个值进行平均


现在的问题是,运行单个测试(通过放置Thread.Sleep)会损失5分钟。有没有一种有效的方法来测试这种基于时间的函数/算法?

为什么不使用适当的时间戳值来模拟/创建测试数据,例如
DateTime.Now.AddMinutes(1)2,3,4…

或者您的业务逻辑真的需要为每个“迭代”等待一分钟吗? 我的意思是,通常你只是把数据传递给你的计算方法,不管数据是在什么时候创建的,对吗?
如果不是这样,也许可以重构代码,使其更易于测试;)

应该使用垫片指定要为时间戳值返回的值。由于您使用的是Visual Studio,请查看此链接以解释如何使用它们:。DateTime之类的对象可能很难模拟,因为DateTime是一个类而不是一个接口。垫片将重定向对对象(如DateTime)的调用。现在重定向到您编写的自定义函数。

前滚时间…@MitchWheat,如果我前滚,它不会影响系统时间吗?使用内部时间;重构以传入一个返回当前时间的服务……这似乎是个好主意。必须对代码进行重构,使其更易于测试。