Есть ли возможность переопределить сообщение FluentAsserions по умолчанию?

Есть ли возможность переопределить сообщения по умолчанию FluentAssertions. Иногда я просто хочу, чтобы мое пользовательское сообщение было напечатано в результате неудачного теста. Пока я не нашел решения для этого, но, возможно, я что-то упустил.

Пример:

myOrderedList.SequenceEqual(desiredOrderedList)
    .Should().BeTrue("Elements are not in correct order.\r\n" +
        $"Error in JSON file: {fileName}.\r\n" +
        $"Required order of elements is {string.Join(", ", desiredOrderedList)}");

Сообщение о результате:

Expected boolean to be true because Elements are not in correct order.
Error in JSON file: MyTestData.json.
Required order of elements is str1, str2, str3, but found False.

Но я хотел бы иметь просто это

Elements are not in correct order.
Error in JSON file: MyTestData.json.
Required order of elements is str1, str2, str3.

EDIT: Пробовал это

public static class BooleanAssertionsExtensions
{
    public static BooleanAssertions Should(this bool? instance)
    {
        return new BooleanAssertions(instance);
    }
}
public class BooleanAssertions
{
    public BooleanAssertions(bool? instance)
    {
        Subject = instance;
    }

    public bool? Subject { get; private set; }

    public AndConstraint<BooleanAssertions> BeTrueCustom(string because = "", params object[] becauseArgs)
    {
        Execute.Assertion
            .ForCondition(Subject == true)
            .BecauseOf(because, becauseArgs)
            .FailWith("{reason}");

        return new AndConstraint<BooleanAssertions>(this);
    }
}

но при попытке сделать .Should().BeTrueCustom(... я получаю эту ошибку: «BooleanAssertions» не содержит определения для «BeTrueCustom», и не может быть найден доступный метод расширения «BeTrueCustom», принимающий первый аргумент типа «BooleanAssertions» (вы пропустили директиву использования или ссылка на сборку?

Я, вероятно, немного медлителен, но не понимаю, что я делаю неправильно или как я могу создать новое расширение, расширяющее или переопределяющее поведение по умолчанию (сообщение по умолчанию). Очень грустно, что FA не поддерживает такую ​​фундаментальную вещь.


person Gondil    schedule 05.12.2019    source источник
comment
А как насчет myOrderedList.Should().BeEquivalentTo(desiredOrderedList, config => config.WithStrictOrdering())?   -  person Fabio    schedule 09.12.2019
comment
@Fabio Все еще не решает проблему с сообщением. Я хотел напечатать только свое собственное сообщение, как это делают другие инструменты. Деннис, вероятно, знает, что это невозможно, если я не создам свою собственную реализацию — он создал FluentAssertions. Однако это не очень просто, и пока я даже не знаю, как создать свой собственный импл. BeEquivalentTo напечатает Expected collection {SomeProperty: 1, OtherProperty: item, SomeProperty: 2, OtherProperty: item} to be equivalent to {SomeProperty: 1, OtherProperty: item, SomeProperty: 2, OtherProperty: other}, but it misses {SomeProperty: 2, OtherProperty: other}.   -  person Gondil    schedule 09.12.2019
comment
@Fabio не заметил, что использование config. Это хорошо. Однако с использованием также настраиваемых сообщений получается полный беспорядок, и поэтому мне не нравится, как FA использует эти настраиваемые сообщения. Вы должны строго следовать контексту Excepted something {because message} but found smthing other. Нет возможности осмысленно добавить какое-то важное сообщение, потому что оно вставлено в этот контекст сообщения FA.   -  person Gondil    schedule 09.12.2019


Ответы (1)


Если вы не напишете свои собственные расширения, вы не сможете.

person Dennis Doomen    schedule 05.12.2019
comment
Хм, что это на самом деле означает? Я немного смущен. Не хочу делать новое расширение, просто хочу переопределить текущую функциональность. Для меня достаточно было бы избавиться от всего содержимого в каждом .FailWith(), кроме {reason}. Или лучше добавить простое логическое значение OnlyCustomMessage=false в качестве параметра, который, если будет истинным, когда только {причина} будет в FailWith() - person Gondil; 06.12.2019
comment
пожалуйста, проверьте РЕДАКТИРОВАТЬ в моем вопросе, не знаю, что я делаю неправильно - person Gondil; 09.12.2019
comment
Компилятор может выбрать другой метод расширения на основе правил разрешения перегрузки. Проверьте определение метода Should(), которое выбирает компилятор, чтобы понять, что происходит. - person Dennis Doomen; 12.12.2019