流利断言 - 在ShouldBeEquivalentTo()中覆盖比较

时间:2014-11-11 10:02:31

标签: c# fluent-assertions

我有以下DTO:

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

我试图根据FA wiki使用此语法覆盖属性的比较:

public void Override_test()
{
    // Arrange
    var actual = new Dto { Date = DateTime.Now };
    var expected = new Dto { Date = DateTime.Now };

    // Act

    // Assert
    actual.ShouldBeEquivalentTo(expected, options => 
        options.Using<DateTime>(x => x.Subject.Should().BeCloseTo(DateTime.Now)));
}

但是测试没有编译。我收到这个错误:

Cannot implicitly convert type 'FluentAssertions.Equivalency.EquivalencyAssertionOptions<FluentAssertions.ShouldBeEquivalentTo.Override.Dto>.Restriction<System.DateTime>' to 'FluentAssertions.Equivalency.EquivalencyAssertionOptions<FluentAssertions.ShouldBeEquivalentTo.Override.Dto>'

有人可以建议正确的语法吗?

1 个答案:

答案 0 :(得分:5)

您必须告诉FA何时使用Using使用WhenTypeIs<DateTime>()构造。换句话说:

actual.ShouldBeEquivalentTo(expected, options => 
    options.Using<DateTime>(x => x.Subject.Should().BeCloseTo(DateTime.Now)).WhenTypeIs<DateTime>());

但是,我建议不要太依赖DateTime.Now。相反,请考虑使用Ayende Rahien在this文章中提出的内容。