Assert.AreEquivalent Methode

Definition

Überlädt

Name Beschreibung
AreEquivalent<T>(T, T, Boolean, String, String, String)

Testet, ob zwei Objektdiagramme strukturell gleichwertig sind (tiefe Gleichheit) und löst eine Ausnahme aus, wenn sie nicht vorhanden sind.

AreEquivalent<T>(T, T, String, String, String)

Testet, ob zwei Objektdiagramme strukturell gleichwertig sind (tiefe Gleichheit) und löst eine Ausnahme aus, wenn sie nicht vorhanden sind.

AreEquivalent<T>(T, T, Boolean, String, String, String)

Quelle:
Assert.AreEquivalent.cs

Testet, ob zwei Objektdiagramme strukturell gleichwertig sind (tiefe Gleichheit) und löst eine Ausnahme aus, wenn sie nicht vorhanden sind.

public static void AreEquivalent<T>(T? expected, T? actual, bool strict, string? message = "", string expectedExpression = "", string actualExpression = "");
static member AreEquivalent : 'T * 'T * bool * string * string * string -> unit
Public Shared Sub AreEquivalent(Of T) (expected As T, actual As T, strict As Boolean, Optional message As String = "", Optional expectedExpression As String = "", Optional actualExpression As String = "")

Typparameter

T

Der Typ der zu vergleichenden Werte.

Parameter

expected
T

Der erste zu vergleichende Wert. Dies ist der Wert, den der Test erwartet.

actual
T

Der zweite zu vergleichende Wert. Dies ist der Vom Testcode erzeugte Wert.

strict
Boolean

Wenn trueder Vergleich fehlschlägt, wenn actual öffentliche Eigenschaften oder Felder deklariert werden, die nicht für expectedden Laufzeittyp vorhanden sind, oder wenn zusätzliche Wörterbuchschlüssel vorhanden actualsind. Wenn false (standard) werden zusätzliche Member und Wörterbuchschlüssel actual ignoriert. Wenn die Laufzeittypen identisch expected sind, actual hat dieses Flag keine Auswirkungen auf den Vergleich von öffentlichen Membern, aber es lehnt beim Vergleichen von Wörterbüchern weiterhin zusätzliche Wörterbuchschlüssel ab actual .

message
String

Die Nachricht, die in die Ausnahme eingeschlossen werden soll, wenn actual sie nicht gleichwertig expectedist. Die Meldung wird in Testergebnissen angezeigt.

expectedExpression
String

Der syntaktische Ausdruck, der vom Compiler über den Aufruferargumentausdruck angegeben wird. Benutzer sollten keinen Wert für diesen Parameter übergeben.

actualExpression
String

Der syntaktische Ausdruck des tatsächlichen Ausdrucks, der vom Compiler über den Aufruferargumentausdruck angegeben wird. Benutzer sollten keinen Wert für diesen Parameter übergeben.

Ausnahmen

Ausgelöst, wenn expected und actual nicht strukturell gleichwertig sind.

Gilt für:

AreEquivalent<T>(T, T, String, String, String)

Quelle:
Assert.AreEquivalent.cs

Testet, ob zwei Objektdiagramme strukturell gleichwertig sind (tiefe Gleichheit) und löst eine Ausnahme aus, wenn sie nicht vorhanden sind.

public static void AreEquivalent<T>(T? expected, T? actual, string? message = "", string expectedExpression = "", string actualExpression = "");
static member AreEquivalent : 'T * 'T * string * string * string -> unit
Public Shared Sub AreEquivalent(Of T) (expected As T, actual As T, Optional message As String = "", Optional expectedExpression As String = "", Optional actualExpression As String = "")

Typparameter

T

Der Typ der zu vergleichenden Werte.

Parameter

expected
T

Der erste zu vergleichende Wert. Dies ist der Wert, den der Test erwartet.

actual
T

Der zweite zu vergleichende Wert. Dies ist der Vom Testcode erzeugte Wert.

message
String

Die Nachricht, die in die Ausnahme eingeschlossen werden soll, wenn actual sie nicht gleichwertig expectedist. Die Meldung wird in Testergebnissen angezeigt.

expectedExpression
String

Der syntaktische Ausdruck, der vom Compiler über den Aufruferargumentausdruck angegeben wird. Benutzer sollten keinen Wert für diesen Parameter übergeben.

actualExpression
String

Der syntaktische Ausdruck des tatsächlichen Ausdrucks, der vom Compiler über den Aufruferargumentausdruck angegeben wird. Benutzer sollten keinen Wert für diesen Parameter übergeben.

Ausnahmen

Ausgelöst, wenn expected und actual nicht strukturell gleichwertig sind.

Hinweise

Diese Assertion führt einen tiefen, ordersensitiven strukturellen Vergleich von zwei Objektdiagrammen durch. Sie unterscheidet sich von AreEquivalent(ICollection, ICollection)der, die nur die Äquivalenz auf oberster Ebene überprüft, ohne die Elementreihenfolge zu berücksichtigen.

Die Vergleichsregeln sind:

  • Referenzgleiche Werte (einschließlich beide null) werden als gleichwertig betrachtet.
  • Primitive ähnliche Typen (Numerische, Boolean, , Char, StringEnumerationen, DateTime, , , DateTimeOffset, TimeSpan, , GuidUri, Type, ) Versionwerden mit Equals(Object)verglichen. Auf Zielframeworks, die sie liefern, DateOnly, , TimeOnlyHalf, Int128und UInt128 werden auch als grundtypartig behandelt.
  • Wenn der statische Typ (Kompilierungszeit) eines Werts IEquatable<T> für sich selbst implementiert wird, Equals(T) wird er verwendet und die Rekursion an diesem Punkt beendet. Einfache Equals(Object) Außerkraftsetzungen werden ignoriert – der Comparer rekursiert immer in Member für diese.
  • Wörterbücher (IDictionary, IDictionary<TKey, TValue>oder IReadOnlyDictionary<TKey,TValue>) werden nach Schlüsselsatz verglichen, wobei Werte rekursiv verglichen werden. Nachschlagevorgänge werden über das Quellwörterbuch weitergeleitet, damit die IEqualityComparer<T> Schlüssel beibehalten werden.
  • Andere Enumerationen (ohne String) werden in der Iterationsreihenfolge mit element-nach-Element verglichen. Der Vergleich ist geordnet vertraulich; wenn die Reihenfolge irrelevant ist, verwenden Sie AreEquivalent(ICollection, ICollection) die Sammlung selbst.
  • Andere Verweistypen werden durch Rekursieren in alle öffentlichen Instanzeigenschaften (mit einem öffentlichen Getter und ohne Indexparameter) und öffentlichen Instanzfeldern verglichen. Statische, nicht öffentliche und indizierte Member werden ignoriert.
  • Referenzzyklen werden nachverfolgt und höchstens pro (erwartetes, tatsächliches) Paar durchlaufen. Derselbe Mechanismus erzwingt die Diagrammtopologie: Wenn derselbe Verweis auf einer Seite mit unterschiedlichen Verweisen auf der anderen Seite gekoppelt ist, schlägt die Assertion fehl.
  • Wenn ein benutzerdefinierter Equals(T)Member-Getter oder ein Wörterbuchzugriff (TryGetValue, ContainsKeyoder eine Enumeration) ausgelöst wird, während er ausgewertet wird, schlägt die Assertion mit einer Meldung fehl, die den Ausnahmetyp und die Meldung beschreibt.
  • Vergleichsstopps nach einer begrenzten Rekursionstiefe, um ungewöhnlich tiefe Objektdiagramme zu vermeiden StackOverflowException , und meldet diese Bedingung als Assertionsfehler.

Gilt für: