Assert.AreEquivalent Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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, eUInt128vengono 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.