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)

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top