c# - 为什么.NET 中没有 IDateTimeProvider 而 DateTime 有 Now getter?

标签 c# .net unit-testing oop

目前我正在为一个组件编写一个单元测试,该组件执行特定于日期时间的验证。我创建了 IDateTimeProvider 接口(interface),用作 DateTime.UtcNow 包装器,业务对象直接使用接口(interface)而不是 DateTime。似乎 DateTime 有点过载,应该分成一个值和一个从操作系统获取该值的东西。我想知道在 .NET 中是否有不使用 IDateTimeProvider (IClock) 接口(interface)的特殊原因?

最佳答案

简单地说:因为 BCL 的很大一部分并不是为可测试性而设计的。

就“核心”功能而言,随机数生成也是如此 - 许多与 HTTP 相关的类伪造起来更糟糕 :( 至少在这种情况下,引入你自己的时钟相当容易界面。

从好的方面来说,当Noda Time已准备好用于生产,它不仅会提供比 BCL 更好的日期/时间 API - 它还会提供对测试更友好的 API :)

关于c# - 为什么.NET 中没有 IDateTimeProvider 而 DateTime 有 Now getter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3131702/

相关文章:

mysql - 为什么 VS 告诉我 MySqlCommand.Parameters.Add 已弃用?

c# - ORM架构

python - 如何避免从元类派生的动态生成的类最终不会成为同一个类?

c# - 按多对多关系分组

c# - 使用 Linq 对每天的最早条目进行分组

.net - 无论版本如何,如何引用 DLL?

asp.net-mvc - 使用存储库模式的 ASP.NET MVC 单元测试

Python模拟补丁不重置返回值

c# - 具有可变数量参数的函数

c# - 如何在javascript中使用.net资源文件