NUnit Assert.AreEqual DateTime Tolerances
我想知道是否有人find了一个很好的解决scheme:
在我们的unit testing中, 我们通常使用Assert.AreEqual()
来validation我们的结果。 一切都很好, 直到我们开始尝试在DateTime属性上使用它。
虽然时间非常相似,但是有时会以毫秒为单位,这会导致testing失败。 在我们的申请中; 只要他们准确到第二; 这对我们来说已经足够了。
在这种情况下,有没有人find一个很好的方法来实现公差? 通常我们的解决方法是将其分成两个单独的语句; 一个检查.ToShortDateString()
,另一个检查.ToShortTimeString()
,但在我看来这看起来马虎。
你可以用类似的方法来检查公差:
Debug.Assert((date1 - date2) < TimeSpan.FromSeconds(1));
如果您不确定哪个date更新,请使用
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);
使用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);
要正确检查任意2个任意date是否等于1秒的容差,以下是正确的解决scheme:
Debug.Assert(Math.Abs((date1 - date2).TotalSeconds) < 1)
我想我会添加这个作为一个解决scheme,因为接受的解决scheme是错误的,当date2
大于date1
超过一秒钟,并且解决scheme没有更新后,我的评论@ SwDevMan81。