我开始建立一个系统的一部分,它将持有大量的DateTime验证,以及很多'如果它在现在之前完成'或'如果它将在一小时内开始等'。
通常的方法是使用 DateTime.Now 来获取实际时间。
然而,我预测,在单元测试期间,这会给我带来真正的麻烦,因为我将不得不在测试运行时设置我的testdata,而不是使用默认的测试数据集。 所以我想:为什么不使用我自己的'now'所以我可以将当前的日期时间设置为任何时刻。 因为我不想设置测试服务器内部时钟我正在考虑这个解决方案,我想知道你对它的看法。 基本思想是我使用自己的DateTime类。 该课程为您提供当前的日期时间,但您也可以从外部设置自己的时间。 public static class MyDateTime
{
private static TimeSpan _TimeDifference = TimeSpan.Zero;
public static DateTime Now
{
get
{
return DateTime.Now + _TimeDifference;
}
}
public static void SetNewNow(DateTime newNow)
{
_TimeDifference = newNow - DateTime.Now;
}
public static void AddToRealTime(TimeSpan timeSpan )
{
_TimeDifference = timeSpan;
}
public static void SubtractFromRealTime(TimeSpan timeSpan)
{
_TimeDifference = - timeSpan;
}
}
答案 0 :(得分:3)
前段时间我已经读过一些关于它的内容了。使用您最喜欢的搜索引擎短搜索模拟DateTime.Now 应该会显示足够的链接。
这看起来很有趣: http://blog.typemock.com/2009/05/mockingfaking-datetimenow-in-unit-tests.html
答案 1 :(得分:0)