我有以下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>'
有人可以建议正确的语法吗?
答案 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文章中提出的内容。