在 最好的
策略是把当前时间的抽象和注入是抽象到消费者。
另外 ,您还可以将时间抽象定义为 环境上下文 :
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 UtcNow { get; } public static void ResetToDefault() {TimeProvider.current = DefaultTimeProvider.Instance; } }
这将使您可以像这样使用它:
var now = TimeProvider.Current.UtcNow;
在单元测试中,可以
TimeProvider.Current用“测试双精度/模拟”对象替换。使用最小起订量的示例:
var timeMock = new Mock<TimeProvider>();timeMock.SetupGet(tp => tp.UtcNow).Returns(new DateTime(2010, 3, 11));TimeProvider.Current = timeMock.Object;
但是,当在静态状态下进行单元测试时,请务必记住通过调用来 拆开灯具
TimeProvider.ResetToDefault()。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)