8

是否有 nuget 包或其他“标准”包装了您的代码耦合到时创建的硬依赖项DateTime.Now

在写我自己的之前,我正在寻求这方面的指导。尽管这样做是微不足道的,但如果它已经作为某种标准,我宁愿使用现有的东西。

4

3 回答 3

3

我非常怀疑是否有任何如此微不足道的东西的 nuget 包 - 一个接口和可能两个实现(“系统”时钟和一个用于测试的假时钟)。

如果你自己做这些,我会强烈考虑让时钟返回 aDateTimeOffset而不是 a DateTime,或者至少让它 wrap DateTime.UtcNow...DateTime.Now是一个等待发生的问题......

然而,野田时间开箱即用地包含了所有这些。你可能不想要整个野田时间只是因为这个原因,请注意......

(有一个 Noda Time nuget 包,但它肯定是预发布的。我需要在某个时候将它更新到 0.2 版本,但它仍然不是 v1 级别。虽然到达那里......)


如果你想要一种真正廉价和愉快的方式来表达依赖关系,你总是可以使用一个Func<DateTime>Func<DateTimeOffset>任何你通常表达依赖关系的地方。接口方法虽然更干净:)

于 2011-10-21T15:22:34.940 回答
1

我不知道有任何 nuget 包可以做到这一点。当我遇到这个问题时,我只是创建了自己的类型,如下所示:

public static class SystemTime
{
    public static Func<DateTime> Now = () => DateTime.Now;
}

这样,在您的单元测试中,您可以轻松更改 Now 的功能以返回您想要的任何 DateTime。

于 2011-10-21T15:21:57.110 回答
0

假设我们有一个方法:

public void Foo() {

  var now = DateTime.UtcNow;
  Record(now);      

我总是在需要时采用的解决方案DateTime.Now是:

public void Foo(DateTime? now = null) {

  Record(now.GetValueOrDefault(DateTime.UtcNow));
于 2015-07-31T17:35:01.580 回答