Comment puis-je comparer la valeur null et de la corde.Vide (“"ou"”) dans l'assertions?
-
21-12-2019 - |
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)
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.