单元测试中当前日期问题的模式

时间:2011-02-04 08:34:30

标签: unit-testing design-patterns

是否有共同的知识模式或成语来解决使用新Date()的代码极难进行单元测试的问题?

我知道一种可能的解决方案(例如http://refactoringaspnet.blogspot.com/2010/02/unit-testing-code-which-is-dependent-on.html),但问题是这个问题是否有共同的模式和语言。

4 个答案:

答案 0 :(得分:1)

我有时会做的是构建一个负责返回日期的界面。 例如:

public interface ISystemClock
{
    DateTime GetCurrentDate();
}

如果单元测试需要,可以将其模拟出来。

答案 1 :(得分:0)

如果我不理解你的需求,那么你正在寻找“嘲笑”:

这为一些不属于测试的底层代码提供了一个虚假的实现,但它必须正常工作才能成功测试某些逻辑。

答案 2 :(得分:0)

就是这样。你必须模仿/伪造时间的阅读。这可以超出系统时间。您可以拥有一个通用的“环境”界面,可以让您控制其他非确定性因素,以便进行测试。

答案 3 :(得分:0)

想法是简单地移动界面后面难以测试的任何东西(即,为了单元测试而难以控制)。然后使用假或模拟来提供所需的控制。

你在问题​​中链接的博客帖子大部分是正确的。但是我个人不会做最后一点创建一个实例化依赖的TestableClock。我更喜欢将其作为ctor参数或方法参数传递。