zoukankan      html  css  js  c++  java
  • 单元测试mock当前时间

    在实际项目中很多地方用到DateTime.Now,这个时间是时时变化的。如果要进行单元测试对比预期结果时,这个时间无法预测,可以添加如下两个时间类

    namespace Common.Helper
    {
        /// <summary>
        /// 获取当前时间
        /// However, when unit testing with static state, always remember to tear down your fixture by calling .
        /// </summary>
        public abstract class TimeProvider
        {
            private static TimeProvider current =
                DefaultTimeProvider.Instance;
            public static TimeProvider Current
            {
                get { return TimeProvider.current; }
                set
                {
                    if (value == null)
                    {
                        throw new ArgumentNullException("value");
                    }
                    TimeProvider.current = value;
                }
            }
    
            public abstract DateTime Now { get; }
    
            public static void ResetToDefault()
            {
                TimeProvider.current = DefaultTimeProvider.Instance;
            }
        }
        public class DefaultTimeProvider : TimeProvider
        {
            private readonly static DefaultTimeProvider instance =
                new DefaultTimeProvider();
    
            private DefaultTimeProvider() { }
    
            public override DateTime Now
            {
                get { return DateTime.Now; }
            }
    
            public static DefaultTimeProvider Instance
            {
                get { return DefaultTimeProvider.instance; }
            }
        }
    }
    View Code

    在实际代码中使用方法:

    var now = TimeProvider.Current.Now;

    单元测试模拟方法:

    var timeMock = new Mock<TimeProvider>();
    timeMock.SetupGet(tp => tp.Now).Returns(new DateTime(2010, 3, 11));
    TimeProvider.Current = timeMock.Object;

    需要用到moq4模拟对象

  • 相关阅读:
    Java设计模式-装饰器模式
    【c++内存分布系列】单独一个类
    【转】LCS
    快速排序
    冒泡排序
    选择排序
    多线程读取全局变量
    【转】一致性hash算法(consistent hashing)
    【转】五笔的字典序编码与解码
    给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?
  • 原文地址:https://www.cnblogs.com/missile/p/7065831.html
Copyright © 2011-2022 走看看