Как я могу сравнить null и string.Empty (или «») в плавных утверждениях?

StackOverflow https://stackoverflow.com//questions/24033905

Вопрос

У меня есть два объекта одного типа, тип имеет строковое поле, в первом объекте значение равно нулю, во втором значение "", как я могу заставить беглые утверждения предположить, что это правильно?

Само утверждение:

callResult.ShouldBeEquivalentTo(centreResponse, 
                                opt => opt.Excluding(r => r.DateOpen));

здесь возникает исключение, заявляющее, что ожидаемое значение равно нулю, реальное значение равно "" (или наоборот)

Это было полезно?

Решение

Что вы можете сделать, так это переопределить поведение свойств типа string так:

callResult.ShouldBeEquivalentTo(centreResponse, opt => opt
          .Excluding(r => r.DateOpen)
          .Using<string>(ctx => CompareStrings(ctx)).WhenTypeIs<string>());       

public void CompareStrings(IAssertionContext<string> ctx)
{
    var equal = (ctx.Subject ?? string.Empty).Equals(ctx.Expectation ?? string.Empty);

    Execute.Assertion
        .BecauseOf(ctx.Because, ctx.BecauseArgs)
        .ForCondition(equal)
        .FailWith("Expected {context:string} to be {0}{reason}, but found {1}", ctx.Subject, ctx.Expectation);
}    

Вы можете немного это исправить, инкапсулировав CompareStrings метод в реализации IAssertionRule.См. RelaxingDateTimeAssertionRule в модульных тестах FluentAssertions здесь.

Вы можете добавить это пользовательское правило утверждения в качестве правила по умолчанию для всех утверждений вашего типа. callResult переменная, но мне все равно нужно что-то добавить, чтобы разрешить глобальные значения по умолчанию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top