FluentAssertions 等效比较行为和 IMemberInfo

FluentAssertions Equivalency Comparison Behavior and IMemberInfo

我正在使用 FluentAssertions (v6.2.0) 来测试 API 的 return table 类数据。我想更改其中一个字段的比较行为,并尝试使用 documentation.

中描述的方法
orderDto.Should().BeEquivalentTo(order, options => options
    .Using<DateTime>(ctx => ctx.Subject.Should().BeCloseTo(ctx.Expectation, 1.Seconds()))
    .When(info => info.Name == "Date"));

问题是 When 扩展方法期望的 IMemberInfo class 没有 Name 属性,它有 属性 称为 PathName 是否已被 Path 替换,这是文档中的错字,还是我需要导入另一个名称空间才能使用 Name 属性?

通过快速查看 FluentAssertions source code,我发现 info 参数是 IObjectInfo 类型并且它有一个 Path 属性.使用此代码的快速测试显示 Path 属性 按您预期的方式工作:

void Main()
{
    var orderDto = new OrderDto { Date = DateTime.Now };
    var order = new Order { Date = DateTime.Now };
    //var order = new Order { Date = DateTime.Now.Subtract(TimeSpan.FromSeconds(2)) };

    orderDto.Should().BeEquivalentTo(order, options => options
        .Using<DateTime>(ctx => ctx.Subject.Should().BeCloseTo(ctx.Expectation, 1.Seconds()))
        .When(info => info.Path == "Date"));
}

class OrderDto {
    public DateTime Date { get; set; }
}

class Order
{
    public DateTime Date { get; set; }
}

事实上,该代码的 FluentAssertions 测试也使用了路径。参见 https://github.com/fluentassertions/fluentassertions/blob/master/Tests/FluentAssertions.Specs/Equivalency/ExtensibilityRelatedEquivalencySpecs.cs#L394

还有一个具有 NamePath 属性的 IMethodInfo 接口。但是,Include*Exclude* 方法使用了它。

所以这似乎是一个文档错误。