Има ли възможност за отмяна на съобщението 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.

РЕДАКТИРАНЕ: Опитах това

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“ (липсва ли директива за използване или справка за събрание?

Вероятно съм малко бавен, но не разбирам какво правя погрешно или как мога да създам ново разширение, разширяващо или заменящо поведение по подразбиране (съобщение по подразбиране). Доста жалко, че ФА не поддържа такова фундаментално нещо.


person Gondil    schedule 05.12.2019    source източник
comment
Какво ще кажете за myOrderedList.Should().BeEquivalentTo(desiredOrderedList, config => config.WithStrictOrdering())?   -  person Fabio    schedule 09.12.2019
comment
@Fabio Все още не е разрешен проблемът със съобщението. Исках да отпечатам само персонализираното си съобщение, както правят другите инструменти. Денис вероятно знае, че не е възможно, освен ако не създам собствена реализация - той създаде FluentAssertions. Това обаче не е много лесно и засега дори не знам как да създам свой собствен impl. 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 като параметър, който ако ще бъде верен, когато само {reason} ще бъде в FailWith() - person Gondil; 06.12.2019
comment
моля, проверете EDIT във въпроса ми, не знам какво правя погрешно - person Gondil; 09.12.2019
comment
Компилаторът може да избере различен метод на разширение въз основа на правилата за разрешаване на претоварване. Проверете дефиницията на метода Should(), който компилаторът избира, за да разбере какво се случва. - person Dennis Doomen; 12.12.2019