Как показать имя переменной в сообщении об исключении, когда утверждение не выполняется с помощью FluentAssertions? - PullRequest
1 голос
/ 17 февраля 2020

Я пытаюсь создать некоторые классы Assertion с помощью библиотеки FluentAssertions. Это код подтверждения:

public AndConstraint<MyTaskAssertions> Work(string because = "", params object[] becauseArgs)
{
    Execute.Assertion
        .BecauseOf(because, becauseArgs)
        .WithExpectation("Expected {context:mytask} to work{reason}, ")
        .Given(() => Subject)
        .ForCondition(x => x.Works)
        .FailWith("but it doesn't");

    return new AndConstraint<MyTaskAssertions>(this);
}

А это мой тест:

var t = new MyTask {Works=false};
t.Should().Work();

Все работает нормально, за исключением того, что вместо имени переменной t, " mytask"отображается в сообщении об исключении:

Ожидается, что mytask будет работать, но не

Я прочитал Расширяемость на странице документации, и я также проверил исходный код для встроенных утверждений, но я все еще не уверен, что именно мне не хватает в сообщении об исключении, чтобы показать фактическое имя переменной вместо того, что после "context:" заполнитель.

1 Ответ

2 голосов
/ 17 февраля 2020

Вам нужно пометить свой метод с помощью [CustomAssertion]. См. Также https://fluentassertions.com/introduction#subject -идентификация

...