Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Unit Test von Linq Abfrage mit Fluent Assertions
OXO
myCSharp.de - Member



Dabei seit:
Beiträge: 70

Themenstarter:

Unit Test von Linq Abfrage mit Fluent Assertions

beantworten | zitieren | melden

Hallo,

ich habe ein Array und eine Liste mit unterschiedlichem Aufbau. In einem Test möchte ich sicherstellen, dass alle Daten aus dem Array auch in der Liste enthalten sind.
Da es in einem Test läuft, muss es nachtürlich wirken, wie ein Assert. Dazu hatte ich einen Linq-Ausdruck gemacht, der in einer Schleife über das Array und unter Verwendung von ..Should().Be(..) in der Liste fragt, ob das Element vorhanden ist.

Kann man im Fall, dass innerhalb der Verundung des Linq-Ausdrucks eine Property abweicht, ein Kriterium (z.B. x.A == array.A && x.B == array.B && ...) also nicht stimmt, dann auch ausgeben kann, wo es abweicht, also so z.B. x.B == array.B den Unterschied hatte, so dass das Should-Nicht erfüllt werden konnte?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.183

beantworten | zitieren | melden

Du kannst das machen, was Should Dir hier ermöglicht.
Wenn Du eine Abfrage wie


array.A && x.B == array.B && 
hast, was eine simple Condition darstellt, dann kennt hier Should auch nur die Condition (als Expression) - und nicht die Property (also den Inhalt).
Du musst einfach jede Property einzeln überprüfen, ohne "Verundung". Nur dann hat der Should-Kontext auch mehr Infos als nur eine Condition und Du kannst einzelne Fehlermeldung erhalten/selbst setzen.

Hellsehen kann Fluent Assertions leider auch nicht ;-)
Das steht auch irgendwo in den Recommendations von Fluent Assertions.
private Nachricht | Beiträge des Benutzers
OXO
myCSharp.de - Member



Dabei seit:
Beiträge: 70

Themenstarter:

beantworten | zitieren | melden

Hallo Abt,

genau so hatte ich mir das auch schon gedacht
Aber wenn ich einzelne Shoulds habe, dann fällt an sich ja die Verundung weg? Also es könnte sein, dass ein Eintrag ein einzelnes x.B drin hat, was ein anderer auch hat. Nur nicht in der richtigen Kombination. Es müsste da schon sein, dass irgendwie alle Kriterien.

Wäre fast so, als ob ich eine Hintereinanderreihung von mehreren Shoulds brauche (mit Punkt getrennt), was aber wohl nicht zu gehen scheint.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.183

beantworten | zitieren | melden

Das ist korrekt. Da bleibt Dir nur das Nutzen von Alternativen, zB via Match oder anonyme Objekte.


response.Should()
        .Match<MyObject>( x => 
            x.Property1 == "abc" && 
            x.Property2 == "xyz"
        );

response.BeEquivalentTo( new { 
            Property1 = "abc",
            Property2 = "xyz"
        }, options => options.ExcludingMissingMembers());
Die Fehlermeldung beider Tests sind aber sehr mager, weil Expressions halt nicht mehr hergeben.
So funktioniert das System halt drunter, und schwarze Magie kann da FA nicht anwenden.

Mehr wird Dir da nicht möglich sein, ausser eigene AssertionProvider zu schreiben.
https://fluentassertions.com/extensibility/
private Nachricht | Beiträge des Benutzers
OXO
myCSharp.de - Member



Dabei seit:
Beiträge: 70

Themenstarter:

beantworten | zitieren | melden

Okay, dann muss ich mich wohl erst einmal damit zufrieden geben
Vielen Dank für Deine Hilfe!
private Nachricht | Beiträge des Benutzers