【问题标题】:How to correctly combine Using and WhenTypeIs<DateTime> in Fluent Assertions如何在 Fluent 断言中正确组合 Using 和 WhenTypeIs<DateTime>
【发布时间】:2016-11-02 10:08:29
【问题描述】:

我有一个这样的对象字典:Attributes = new Dictionary&lt;string, object&gt;();

字典中有一个DateTime,我正在尝试测试DateTime 是否落在特定的一天,如下所示:

Attributes[key].ShouldBeEquivalentTo(DateTime.Now, options => options
    .Using<DateTime>(ctx =>
    {
        //throw new InvalidOperationException();
        ctx.Subject.Should().BeSameDateAs(ctx.Expectation);
    }).WhenTypeIs<DateTime>());

但是这会导致断言Expected subject to be &lt;2016-06-30 11:38:05.447&gt;, but found &lt;2016-06-30 10:38:05&gt; 失败。日期是同一天,所以我认为应该通过,但断言失败。

这使我得出结论,ctx.Subject.Should().BeSameDateAs(ctx.Expectation) 行没有被应用。我尝试添加异常并进行调试,但似乎永远无法到达操作中的代码。

我应该期待这项工作吗?我这样做对吗?

【问题讨论】:

  • 我不知道这个API,所以这只是一个猜测:试试options.WhenTypeIs&lt;DateTime&gt;().Using&lt;DateTime&gt;(...)
  • 所以基本上你正在尝试测试存储在object中的DateTime
  • @AlekseyL。差不多,我想我应该补充一点,不是object 将是DateTime
  • @JamesWood 对象的属性之一是DateTime?你能添加具体的例子吗?
  • @AlekseyL。抱歉,我说的不是很好,我的意思是该集合还可能包含 DateTime 以外的其他内容,例如一个string。以上是我最初的问题的简化版本,我试图有选择地比较来自两个集合的值。我实际上以不同的方式解决了这个问题。无论如何,您的回答似乎准确地解决了 ShouldBeEquivalentTo 的使用问题,这就是这个问题的意义所在。 :)

标签: c# fluent-assertions


【解决方案1】:

永远不会到达实际代码,因为ShouldBeEquivalentTo 应该比较对象图(实际属性和预期属性)。 Using...WhenTypeIs&lt;DateTime&gt; 将应用于DateTime 类型的属性

在您的情况下,对象本身是 DateTime,因此您可以断言它确实是 DateTime 并链接其他必需的断言:

Attributes[key].Should().BeOfType<DateTime>().Which.Should().BeSameDateAs(DateTime.Now);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-12
    • 2022-10-24
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    相关资源
    最近更新 更多