Как использовать конкретную функцию сравнения для равенства в FluentAssertions - PullRequest
0 голосов
/ 06 июня 2018

Я пишу реализацию Akka.NET Testkit, которая использует FluentAssertions под капотом, но не может понять, как написать «последнее» утверждение: Равенство, используя пользовательский компаратор равенства Func (при получении красивого сообщения об ошибке,конечно).

public void AssertEqual<T>(T expected, T actual,
                           Func<T, T, bool> comparer,
                           string format = "", params object[] args)
{
    // This works, but does not give a good message:
    comparer(expected, actual).Should().BeTrue(format, args);

    // But this doesn't work at all:
    // actual.Should().BeEquivalentTo(expected, options => 
             options.Using<T>( x => comparer(x.Subject, expected).Should().BeTrue())
             .WhenTypeIs<T>(),
         format, args);
}

Я почти уверен, что в ФА должен быть какой-то причудливый способ сделать это, но я не могу его найти.

1 Ответ

0 голосов
/ 06 июня 2018

Почему бы вам не заменить вызов на BeEquivalentTo пользовательским утверждением, построенным поверх Execute.Assertion, как описано в разделе расширяемости ?

Или просто использовать BeEquivalentTo напрямую используете его параметры?Вы можете даже обернуть его в свой собственный код следующим образом:

public static void AssertEqual<T>(T actual, T expected,
    Func<EquivalencyAssertionOptions<T>, EquivalencyAssertionOptions<T>> config)
{
    Func<EquivalencyAssertionOptions<TEvent>, EquivalencyAssertionOptions<TEvent>> effectiveConfig = opt =>
    {
        // customize the assertion in addition to the caller's customization

        return config(opt);
    };

    actual.Should().BeEquivalentTo(expected, effectiveConfig);
}
...