Fluent Assertions — переопределяющее сравнение в ShouldBeEquivalentTo()

У меня есть следующий DTO:

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

И я пытаюсь переопределить сравнение свойства, используя этот синтаксис в соответствии с FA. вики:

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>'

Может ли кто-нибудь посоветовать правильный синтаксис?


person Kevin Kuszyk    schedule 11.11.2014    source источник


Ответы (1)


Вы должны указать FA, когда использовать эту конструкцию Using, используя WhenTypeIs<DateTime>(). Другими словами:

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

Однако я бы посоветовал не слишком полагаться на DateTime.Now. Вместо этого рассмотрите возможность использования чего-то вроде того, что Айенде Рахиен предложил в этой статье. .

person Dennis Doomen    schedule 11.11.2014
comment
Спасибо Денис - сработало. Что касается абстрагирования от DateTime.Now - я согласен, я просто еще не нашел легкого способа, который мне нравится. - person Kevin Kuszyk; 17.11.2014