Frage

Ich habe zwei Objekte desselben Typs, der Typ hat ein Zeichenfolgenfeld, im ersten Objekt ist der Wert null, im zweiten ist der Wert "". Wie kann ich fließende Bewertungen dazu zwingen, anzunehmen, dass dies korrekt ist?

Bewertung selbst:

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

hier wird die Ausnahme ausgelöst, die besagt, dass der erwartete Wert null ist, der echte ist "" (oder umgekehrt)

War es hilfreich?

Lösung

Sie können das Verhalten für Eigenschaften vom Typ überschreiben string wie das:

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

Sie können dies ein wenig bereinigen, indem Sie das einkapseln CompareStrings verfahren bei einer Implementierung von IAssertionRule.Sehen Sie die RelaxingDateTimeAssertionRule in den Unit-Tests von FluentAssertions hier.

Sie können diese benutzerdefinierte Zusicherungsregel als Standard für alle Zusicherungen zu Ihrem Typ hinzufügen callResult variabel, aber ich muss noch etwas hinzufügen, um globale Standardeinstellungen zuzulassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top