Как я могу сравнить null и string.Empty (или «») в плавных утверждениях?
-
21-12-2019 - |
Вопрос
У меня есть два объекта одного типа, тип имеет строковое поле, в первом объекте значение равно нулю, во втором значение "", как я могу заставить беглые утверждения предположить, что это правильно?
Само утверждение:
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
переменная, но мне все равно нужно что-то добавить, чтобы разрешить глобальные значения по умолчанию.