我该如何创建自己的'now'/ DateTime.Now?

时间:2010-06-02 09:02:24

标签: c#

我开始建立一个系统的一部分,它将持有大量的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;
        }
    }

2 个答案:

答案 0 :(得分:3)

前段时间我已经读过一些关于它的内容了。使用您最喜欢的搜索引擎短搜索模拟DateTime.Now 应该会显示足够的链接。

这看起来很有趣: http://blog.typemock.com/2009/05/mockingfaking-datetimenow-in-unit-tests.html

答案 1 :(得分:0)

你是什​​么意思? 如果你需要任何专业化,那么你可以使用扩展方法! 轻松编写DateTime类的扩展方法,并做任何你需要的事情。