我想知道是否有人找到了一个很好的解决方案:
在我们的单元测试中;我们通常使用Assert.AreEqual()
来验证我们的结果。一切都很好;直到我们开始尝试在DateTime属性上使用它。
尽管时间非常相似,但有时它们会以毫秒为单位,这会导致测试失败。在我们的申请中;只要它们准确到第二;这对我们来说已经足够了。
在这种情况下,是否有人找到了以某种方式实施容差的好方法?通常我们的解决方法是将其拆分为两个单独的语句;一个检查.ToShortDateString()
,另一个检查.ToShortTimeString()
,但在我看来这看起来很草率。
答案 0 :(得分:82)
使用 Assert.That 和 Is.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);
答案 1 :(得分:78)
您可以使用以下内容检查公差:
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);
答案 2 :(得分:10)
要正确检查任何2个任意日期是否等于1秒容差,以下是正确的解决方案:
Debug.Assert(Math.Abs((date1 - date2).TotalSeconds) < 1)
我想我会将此作为解决方案添加,因为当date2
大于date1
超过一秒时,已接受的解决方案不正确,并且在我的评论之后解决方案尚未更新@ SwDevMan81。