【问题标题】:NUnit Assert.AreEqual DateTime TolerancesNUnit Assert.AreEqual DateTime 容差
【发布时间】:2011-04-04 10:04:33
【问题描述】:

我想知道是否有人找到了解决此问题的好方法:

在我们的单元测试中;我们通常使用Assert.AreEqual() 来验证我们的结果。一切都很好;直到我们开始尝试在 DateTime 属性上使用它。

虽然时间非常相似,但有时它们会相差几毫秒,这会导致测试失败。在我们的应用程序中;只要它们精确到秒;这对我们来说已经足够了。

有没有人找到一种在这种情况下以某种方式实现公差的好方法?通常,我们的解决方法是将其拆分为 2 个单独的语句;一个检查.ToShortDateString(),另一个检查.ToShortTimeString(),但在我看来这看起来很草率。

【问题讨论】:

    标签: c# .net-3.5 nunit


    【解决方案1】:

    您可以通过以下方式检查公差:

    Debug.Assert((date1 - date2) < TimeSpan.FromSeconds(1));
    

    如果您不确定哪个日期较新,请使用

    Debug.Assert(Math.Abs((date1 - date2).TotalSeconds) < 1)
    

    NUnit 还使用 Within 关键字添加了对此的内置支持

    DateTime now = DateTime.Now;
    DateTime later = now + TimeSpan.FromHours(1.0);
    
    Assert.That(later, Is.EqualTo(now).Within(TimeSpan.FromHours(3.0)));
    Assert.That(later, Is.EqualTo(now).Within(3).Hours);
    

    【讨论】:

    • 非常好。从未想过以这种方式实现它
    • 但你真的不是说&lt;吗?
    • @Dan Tao - 是的,我的断言思想是落后的,是的,如果你想让它出错,那么它应该
    • 如果 date2 比 date1 大一秒以上,这将失败。应检查总秒差的绝对值。例如Debug.Assert(Math.Abs((date1 - date2).TotalSeconds) &lt; 1)
    • NUnit 对此有内置支持,请参阅下面stackoverflow.com/questions/3577856/…的答案@
    【解决方案2】:

    使用 Assert.ThatIs.Equal 约束而不是 Assert.AreEqual。以下是 Nunit 网站本身的代码示例

    DateTime now = DateTime.Now;
    DateTime later = now + TimeSpan.FromHours(1.0);
    
    Assert.That(now, Is.EqualTo(now) );
    Assert.That(later, Is.EqualTo(now).Within(TimeSpan.FromHours(3.0)));
    Assert.That(later, Is.EqualTo(now).Within(3).Hours);
    

    【讨论】:

    • 更清洁的解决方案。如果这个 Assert 失败,产生的消息会清楚地指出失败的原因。
    • 为什么使用Assert.That 而不是Assert.AreEqual?你能解释一下吗?
    【解决方案3】:

    要正确检查任意 2 个日期是否等于 1 秒容差范围内,以下是正确的解决方案:

    Debug.Assert(Math.Abs((date1 - date2).TotalSeconds) < 1)
    

    我想我会将其添加为解决方案,因为当date2 大于date1 超过一秒时,接受的解决方案不正确,并且在我对@SwDevMan81 发表评论后,该解决方案尚未更新。

    【讨论】:

      猜你喜欢
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多