目前我正在为一个组件编写一个单元测试,该组件执行特定于日期时间的验证。我创建了 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/