Jenkins上的NUnit DateTime断言问题

时间:2011-05-19 10:43:50

标签: .net unit-testing nunit jenkins

我使用NHibernate和Spring.net模板来创建DAO。我写了一些保存和检索实体的测试。问题是我们本地机器上的所有测试通过,但在Jenkins上有DateTime变量的奇怪问题:

消息:

Expected: 2011-06-16 15:19:23.765
But was:  2011-06-16 15:19:23.765

任何线索可能是什么原因?

3 个答案:

答案 0 :(得分:5)

最干净的解决方案是:

Assert.That(actual, Is.EqualTo(expected).Within(tolerance).Milliseconds);

After Within(容差)您可以指定从毫秒到天的任何内容。

如果您使用的是http://nuget.org/List/Packages/NUnit.Snippets,那么它只是

atiewms tab tab

答案 1 :(得分:0)

尝试

Assert.Equals(oneDate.ToString("s"), anotherDate.ToString("s"));

其中“s”表示

yyyy-MM-ddTHH:mm:ss

(ISO 8601)。

答案 2 :(得分:0)

我怀疑两个日期在亚毫秒范围内略有不同,可能是由于存储不支持日期/时间值到“滴答”精度。

如果你真的很幸运,NUnit可能会为DateTime提供与double相同的“在一定容忍范围内”。如果没有,这样的事情就可以了:

Assert.IsTrue(Math.Abs(oneDate.TotalSeconds - anotherDate.TotalSeconds) < 0.001)

要么是,要么将DateTime两个值都舍入或截断到适当的毫秒,然后然后使用AreEqual。这肯定会给出更有用的失败信息。