是否有共同的知识模式或成语来解决使用新Date()的代码极难进行单元测试的问题?
我知道一种可能的解决方案(例如http://refactoringaspnet.blogspot.com/2010/02/unit-testing-code-which-is-dependent-on.html),但问题是这个问题是否有共同的模式和语言。
答案 0 :(得分:1)
我有时会做的是构建一个负责返回日期的界面。 例如:
public interface ISystemClock
{
DateTime GetCurrentDate();
}
如果单元测试需要,可以将其模拟出来。
答案 1 :(得分:0)
如果我不理解你的需求,那么你正在寻找“嘲笑”:
这为一些不属于测试的底层代码提供了一个虚假的实现,但它必须正常工作才能成功测试某些逻辑。
答案 2 :(得分:0)
就是这样。你必须模仿/伪造时间的阅读。这可以超出系统时间。您可以拥有一个通用的“环境”界面,可以让您控制其他非确定性因素,以便进行测试。
答案 3 :(得分:0)
想法是简单地移动界面后面难以测试的任何东西(即,为了单元测试而难以控制)。然后使用假或模拟来提供所需的控制。
你在问题中链接的博客帖子大部分是正确的。但是我个人不会做最后一点创建一个实例化依赖的TestableClock。我更喜欢将其作为ctor参数或方法参数传递。