Question

J'ai deux objets du même type, le type a un champ de type chaîne, dans le premier objet la valeur est nulle, dans le second, la valeur est "", comment puis-je forcer le fluide assesrtions de supposer que c'est correct?

Assesrtion lui-même:

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

ici, l'exception est soulevée, en indiquant la valeur est null, le réel est "a" (ou vice versa)

Était-ce utile?

La solution

Ce que vous pouvez faire est de remplacer le comportement pour les propriétés de type string comme ceci:

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);
}    

Vous pouvez nettoyer ce un peu par encapsulation de l' CompareStrings la méthode de la mise en œuvre de IAssertionRule.Voir la RelaxingDateTimeAssertionRule dans les tests unitaires de FluentAssertions ici.

Vous pouvez ajouter que la coutume affirmation de la règle par défaut pour tous les assertions sur votre le type de votre callResult variable, mais je dois encore ajouter quelque chose pour permettre valeurs globales par défaut.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top