Assert.AreEquivalent Metodo

Definizione

Overload

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

Verifica se due oggetti grafici sono strutturalmente equivalenti (uguaglianza profonda) e genera un'eccezione in caso contrario.

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

Verifica se due oggetti grafici sono strutturalmente equivalenti (uguaglianza profonda) e genera un'eccezione se non lo sono.

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

Origine:
Assert.AreEquivalent.cs

Verifica se due oggetti grafici sono strutturalmente equivalenti (uguaglianza profonda) e genera un'eccezione in caso contrario.

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 = "")

Parametri di tipo

T

Tipo di valori da confrontare.

Parametri

expected
T

Primo valore da confrontare. Questo è il valore previsto dal test.

actual
T

Secondo valore da confrontare. Questo è il valore prodotto dal codice sottoposto a test.

strict
Boolean

Quando true, il confronto ha esito negativo se actual dichiara eventuali proprietà o campi pubblici non presenti nel expectedtipo di runtime di o se sono presenti chiavi di dizionario aggiuntive in actual. Quando false (impostazione predefinita), i membri e le chiavi del dizionario aggiuntivi in actual vengono ignorati. Quando i tipi di runtime di expected e actual sono identici, questo flag non ha alcun effetto sul confronto tra membri pubblici, ma rifiuta comunque chiavi di dizionario aggiuntive durante actual il confronto dei dizionari.

message
String

Messaggio da includere nell'eccezione quando actual non è equivalente a expected. Il messaggio viene visualizzato nei risultati del test.

expectedExpression
String

Espressione sintattica di prevista come specificato dal compilatore tramite l'espressione di argomento del chiamante. Gli utenti non devono passare un valore per questo parametro.

actualExpression
String

Espressione sintattica dell'effettivo come specificato dal compilatore tramite l'espressione di argomento del chiamante. Gli utenti non devono passare un valore per questo parametro.

Eccezioni

Generata se expected e actual non sono strutturalmente equivalenti.

Si applica a

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

Origine:
Assert.AreEquivalent.cs

Verifica se due oggetti grafici sono strutturalmente equivalenti (uguaglianza profonda) e genera un'eccezione in caso contrario.

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 = "")

Parametri di tipo

T

Tipo di valori da confrontare.

Parametri

expected
T

Primo valore da confrontare. Questo è il valore previsto dal test.

actual
T

Secondo valore da confrontare. Questo è il valore prodotto dal codice sottoposto a test.

message
String

Messaggio da includere nell'eccezione quando actual non è equivalente a expected. Il messaggio viene visualizzato nei risultati del test.

expectedExpression
String

Espressione sintattica di prevista come specificato dal compilatore tramite l'espressione di argomento del chiamante. Gli utenti non devono passare un valore per questo parametro.

actualExpression
String

Espressione sintattica dell'effettivo come specificato dal compilatore tramite l'espressione di argomento del chiamante. Gli utenti non devono passare un valore per questo parametro.

Eccezioni

Generata se expected e actual non sono strutturalmente equivalenti.

Commenti

Questa asserzione esegue un confronto strutturale profondo e sensibile agli ordini di due oggetti grafici. Differisce da AreEquivalent(ICollection, ICollection), che controlla solo l'equivalenza della raccolta di primo livello senza considerare l'ordine degli elementi.

Le regole di confronto sono:

  • I valori di riferimento uguali (inclusi entrambi null) sono considerati equivalenti.
  • I tipi simili a primitivi (numerici, , , , enums, DateTime, GuidTimeSpanTypeVersionUriDateTimeOffset) vengono confrontati con .Equals(Object)StringCharBoolean Nei framework di destinazione che vengono forniti, DateOnly, TimeOnly, HalfInt128, e UInt128 vengono trattati anche come primitivi.
  • Se il tipo statico (in fase di compilazione) di un valore implementa IEquatable<T> per se stesso, Equals(T) viene usato e la ricorsione si arresta a quel punto. Le sostituzioni semplici Equals(Object) vengono ignorate: l'operatore di confronto si ripete sempre in membri per tali elementi.
  • I dizionari (IDictionary, IDictionary<TKey, TValue>o IReadOnlyDictionary<TKey,TValue>) vengono confrontati in base al set di chiavi, con valori confrontati in modo ricorsivo. Le ricerche vengono instradate tramite il dizionario di origine in modo che le IEqualityComparer<T> chiavi vengano mantenute.
  • Gli altri enumerabili (esclusi String) vengono confrontati in base all'elemento nell'ordine di iterazione. Il confronto è sensibile all'ordine; se l'ordine è irrilevante, utilizzare AreEquivalent(ICollection, ICollection) nella raccolta stessa.
  • Altri tipi di riferimento vengono confrontati ripetendo in tutte le proprietà dell'istanza pubblica (con un getter pubblico e senza parametri di indice) e i campi dell'istanza pubblica. I membri statici, non pubblici e indicizzati vengono ignorati.
  • I cicli di riferimento vengono monitorati e attraversati al massimo una volta per ogni coppia (prevista, effettiva). Lo stesso meccanismo applica la topologia del grafo: se lo stesso riferimento su un lato è associato a riferimenti diversi dall'altro lato, l'asserzione ha esito negativo.
  • Se un getter definito dall'utente Equals(T)o l'accesso al dizionario (TryGetValue, ContainsKeyo enumerazione) viene generato durante la valutazione, l'asserzione non riesce con un messaggio che descrive il tipo di eccezione e il messaggio.
  • Il confronto si arresta dopo una profondità di ricorsione limitata per evitare StackOverflowException grafici a oggetti insolitamente profondi e segnala tale condizione come errore di asserzione.

Si applica a