首页 > 解决方案 > 在所有地方更改 DateTime.now 的最佳方法

问题描述

我有一个要求,无论我们有 DateTime。现在检查它应该与模拟日期检查(从 UI - 仅在测试环境中可访问),我应该如何设计这个功能以最小的变化。是否可以覆盖 DateTime.Now 功能,并且无论在何处使用 DateTime.Now,它都会读取覆盖的值。

对此的任何帮助将不胜感激。

谢谢

标签: c#

解决方案


基本上,DateTime.Now直接停止使用。相反,引入一个时钟的抽象(我通常称之为它IClock),它具有“获取当前日期和时间”的单一操作并将其注入任何地方,就像任何其他依赖项一样。

然后,您可以使用一个简单的实现来委托DateTime.Now(或者更好,DateTime.UtcNow我建议)进行生产,并使用一个假实现来进行测试。

这是我们在我的NodaTime 库中强烈鼓励的方法- 我们为您提供接口生产/假实现。


推荐阅读