Como posso comparar nulo e de seqüência de caracteres.Vazio (ou "a") fluente afirmações?
-
21-12-2019 - |
Pergunta
Eu tenho dois objetos do mesmo tipo, o tipo tem um campo de seqüência de caracteres, em que o primeiro objeto, o valor é nulo, no segundo, o valor é "", como posso forçar fluente assesrtions assumir que isso é correto?
Assesrtion si:
callResult.ShouldBeEquivalentTo(centreResponse,
opt => opt.Excluding(r => r.DateOpen));
aqui a exceção é disparada, informando que o valor esperado é nulo, o real é "" (ou vice-versa)
Solução
O que você pode fazer é substituir o comportamento para propriedades do tipo string
como esta:
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);
}
Você pode limpar isso um pouco encapsulando CompareStrings
método em uma implementação de IAssertionRule
.Ver o RelaxingDateTimeAssertionRule
na unidade de testes de FluentAssertions aqui.
Você pode adicionar que o costume de declaração regra como o padrão para todas as afirmações sobre o seu tipo de sua callResult
variável, mas eu ainda tenho que adicionar algo para permitir padrões globais.