首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#,NUnit:是否可以测试DateTime与另一个DateTime非常接近,但不一定相等?

C#,NUnit:是否可以测试DateTime与另一个DateTime非常接近,但不一定相等?
EN

Stack Overflow用户
提问于 2009-11-24 20:45:54
回答 5查看 4.5K关注 0票数 18

假设我有一个测试:

代码语言:javascript
复制
[Test]
public void SomeTest()
{
    var message = new Thing("foobar");
    Assert.That(thing.Created, Is.EqualTo(DateTime.Now));
}

例如,这可能会失败,事物的构造函数花费了一些时间。是否有某种NUnit构造,允许我指定Created时间不一定与DateTime.Now完全相等,只要它在1秒内就可以了?

是的,我知道构造函数不需要花费太多的时间,只是举个例子:p

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-24 20:49:27

我还没有试过它,但是根据医生们的说法,它看起来应该能用:

代码语言:javascript
复制
Assert.That(thing.Created, Is.EqualTo(DateTime.Now).Within(1).Minutes);

我不能说我通常很喜欢约束系统--我是Assert.AreEqual的拥护者--但是这个特殊的构造相当简洁。

(作为一项原则,我应该指出,最好将某种“时钟”接口作为依赖项传递,这样就不会有任何不准确的地方了。你可以在测试中伪造它,并使用系统时钟进行生产。)

票数 40
EN

Stack Overflow用户

发布于 2009-11-24 20:52:08

检查TimeSpan对象--使用TimeSpan比较两个日期,并检查这些值是否在阈值之内。

代码语言:javascript
复制
TimeSpan span = thing.Created - DateTime.Now;
if(span.TotalSeconds <= 1)
   [..]
票数 2
EN

Stack Overflow用户

发布于 2009-11-24 20:53:26

你需要从定义“非常接近”开始。如果你所说的“非常接近”指的是几百条蜱,那么你可以这样做:

代码语言:javascript
复制
Assert.That(200, Is.LessThanOrEqualTo(DateTime.Now.Ticks - thing.Created.Ticks));

然后,每当你有日期在200内,你的测试合格。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1792817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档