Domanda

Ho due oggetti dello stesso tipo, il tipo ha un campo di stringa, nel primo oggetto il valore è nullo, nel secondo il valore è "", come posso forzare le aspirazioni fluenti per presumere che questo sia corretto?

Assistrice stessa:

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

Qui l'eccezione è sollevata, affermando che il valore atteso è nullo, il vero è "" (o viceversa)

È stato utile?

Soluzione

Cosa puoi fare è ignorare il comportamento per le proprietà del tipo string come questo:

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

È possibile pulire questo un po 'incapsando il metodo CompareStrings in un'implementazione di IAssertionRule.Vedere RelaxingDateTimeAssertionRule nei test dell'unità di fluentessertions qui .

È possibile aggiungere la regola di asserzione personalizzata come predefinito per tutte le asserzioni sul tipo della variabile callResult, ma devo ancora aggiungere qualcosa per consentire i valori predefiniti globali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top