Assert.AreEquivalent 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
AreEquivalent<T>(ReadOnlyMemory<T>, ReadOnlyMemory<T>, Boolean, String, String, String)
測試兩個記憶區域在結構上是否等同(深度且對階敏感元素比較)。
public static void AreEquivalent<T>(ReadOnlyMemory<T> expected, ReadOnlyMemory<T> actual, bool strict, string? message = "", string expectedExpression = "", string actualExpression = "");
static member AreEquivalent : ReadOnlyMemory<'T> * ReadOnlyMemory<'T> * bool * string * string * string -> unit
Public Shared Sub AreEquivalent(Of T) (expected As ReadOnlyMemory(Of T), actual As ReadOnlyMemory(Of T), strict As Boolean, Optional message As String = "", Optional expectedExpression As String = "", Optional actualExpression As String = "")
類型參數
- T
記憶體區域的元素類型。
參數
- expected
- ReadOnlyMemory<T>
測試所期望的記憶。
- actual
- ReadOnlyMemory<T>
被測試程式碼產生的記憶體。
- strict
- Boolean
當 true時,比較則以嚴格模式進行。
- message
- String
當斷言失敗時,例外中應包含訊息。
- expectedExpression
- String
預期的語法表達式由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
- actualExpression
- String
實際的語法表達式,由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
適用於
AreEquivalent<T>(Span<T>, Span<T>, Boolean, String, String, String)
測試兩個跨度在結構上是否等價(深度且對階敏感元素比較)。
public static void AreEquivalent<T>(Span<T> expected, Span<T> actual, bool strict, string? message = "", string expectedExpression = "", string actualExpression = "");
static member AreEquivalent : Span<'T> * Span<'T> * bool * string * string * string -> unit
Public Shared Sub AreEquivalent(Of T) (expected As Span(Of T), actual As Span(Of T), strict As Boolean, Optional message As String = "", Optional expectedExpression As String = "", Optional actualExpression As String = "")
類型參數
- T
跨度的元素類型。
參數
- expected
- Span<T>
測試預期的跨度。
- actual
- Span<T>
由被測程式碼產生的跨度。
- strict
- Boolean
當 true時,比較則以嚴格模式進行。
- message
- String
當斷言失敗時,例外中應包含訊息。
- expectedExpression
- String
預期的語法表達式由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
- actualExpression
- String
實際的語法表達式,由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
適用於
AreEquivalent<T>(ReadOnlySpan<T>, ReadOnlySpan<T>, Boolean, String, String, String)
測試兩個跨度在結構上是否等價(深度且對階敏感元素比較)。
public static void AreEquivalent<T>(ReadOnlySpan<T> expected, ReadOnlySpan<T> actual, bool strict, string? message = "", string expectedExpression = "", string actualExpression = "");
static member AreEquivalent : ReadOnlySpan<'T> * ReadOnlySpan<'T> * bool * string * string * string -> unit
Public Shared Sub AreEquivalent(Of T) (expected As ReadOnlySpan(Of T), actual As ReadOnlySpan(Of T), strict As Boolean, Optional message As String = "", Optional expectedExpression As String = "", Optional actualExpression As String = "")
類型參數
- T
跨度的元素類型。
參數
- expected
- ReadOnlySpan<T>
測試預期的跨度。
- actual
- ReadOnlySpan<T>
由被測程式碼產生的跨度。
- strict
- Boolean
當 true時,比較則以嚴格模式進行。
- message
- String
當斷言失敗時,例外中應包含訊息。
- expectedExpression
- String
預期的語法表達式由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
- actualExpression
- String
實際的語法表達式,由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
適用於
AreEquivalent<T>(Memory<T>, Memory<T>, Boolean, String, String, String)
測試兩個記憶區域在結構上是否等同(深度且對階敏感元素比較)。
public static void AreEquivalent<T>(Memory<T> expected, Memory<T> actual, bool strict, string? message = "", string expectedExpression = "", string actualExpression = "");
static member AreEquivalent : Memory<'T> * Memory<'T> * bool * string * string * string -> unit
Public Shared Sub AreEquivalent(Of T) (expected As Memory(Of T), actual As Memory(Of T), strict As Boolean, Optional message As String = "", Optional expectedExpression As String = "", Optional actualExpression As String = "")
類型參數
- T
記憶體區域的元素類型。
參數
- expected
- Memory<T>
測試所期望的記憶。
- actual
- Memory<T>
被測試程式碼產生的記憶體。
- strict
- Boolean
當 true時,比較則以嚴格模式進行。
- message
- String
當斷言失敗時,例外中應包含訊息。
- expectedExpression
- String
預期的語法表達式由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
- actualExpression
- String
實際的語法表達式,由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
適用於
AreEquivalent<T>(T, T, Boolean, String, String, String)
測試兩個物件圖在結構上是否等價(深度等號),若不相同則拋出例外。
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 = "")
類型參數
- T
比較的價值類型。
參數
- expected
- T
第一個要比較的值。 這是測試所期望的數值。
- actual
- T
要比較的第二個值。 這是被測試程式碼所產生的值。
- strict
- Boolean
當 true時,若 actual 宣告了 執行時型別中不存在 expected的公用屬性或欄位,或 上有額外的字典鍵數, actual則比較失敗。 當(預設值)時 false ,其他成員和字典鍵 actual 開啟會被忽略。
當執行expected時actual型別相同時,此旗標對公開成員比較不影響,但在比較字典時仍會拒絕額外的actual字典鍵。
- message
- String
當例外中包含 actual 的訊息不等 expected價於 。 該訊息會顯示在測試結果中。
- expectedExpression
- String
預期的語法表達式由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
- actualExpression
- String
實際的語法表達式,由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
例外狀況
若 expected 和 actual 結構不等價,則會被拋出。
適用於
AreEquivalent<T>(Span<T>, Span<T>, String, String, String)
測試兩個跨度在結構上是否等價(深度且對階敏感元素比較)。
public static void AreEquivalent<T>(Span<T> expected, Span<T> actual, string? message = "", string expectedExpression = "", string actualExpression = "");
static member AreEquivalent : Span<'T> * Span<'T> * string * string * string -> unit
Public Shared Sub AreEquivalent(Of T) (expected As Span(Of T), actual As Span(Of T), Optional message As String = "", Optional expectedExpression As String = "", Optional actualExpression As String = "")
類型參數
- T
跨度的元素類型。
參數
- expected
- Span<T>
測試預期的跨度。
- actual
- Span<T>
由被測程式碼產生的跨度。
- message
- String
當斷言失敗時,例外中應包含訊息。
- expectedExpression
- String
預期的語法表達式由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
- actualExpression
- String
實際的語法表達式,由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
適用於
AreEquivalent<T>(Memory<T>, Memory<T>, String, String, String)
測試兩個記憶區域在結構上是否等同(深度且對階敏感元素比較)。
public static void AreEquivalent<T>(Memory<T> expected, Memory<T> actual, string? message = "", string expectedExpression = "", string actualExpression = "");
static member AreEquivalent : Memory<'T> * Memory<'T> * string * string * string -> unit
Public Shared Sub AreEquivalent(Of T) (expected As Memory(Of T), actual As Memory(Of T), Optional message As String = "", Optional expectedExpression As String = "", Optional actualExpression As String = "")
類型參數
- T
記憶體區域的元素類型。
參數
- expected
- Memory<T>
測試所期望的記憶。
- actual
- Memory<T>
被測試程式碼產生的記憶體。
- message
- String
當斷言失敗時,例外中應包含訊息。
- expectedExpression
- String
預期的語法表達式由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
- actualExpression
- String
實際的語法表達式,由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
適用於
AreEquivalent<T>(T, T, String, String, String)
測試兩個物件圖在結構上是否等價(深度等號),若不相同則拋出例外。
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 = "")
類型參數
- T
比較的價值類型。
參數
- expected
- T
第一個要比較的值。 這是測試所期望的數值。
- actual
- T
要比較的第二個值。 這是被測試程式碼所產生的值。
- message
- String
當例外中包含 actual 的訊息不等 expected價於 。 該訊息會顯示在測試結果中。
- expectedExpression
- String
預期的語法表達式由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
- actualExpression
- String
實際的語法表達式,由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
例外狀況
若 expected 和 actual 結構不等價,則會被拋出。
備註
此斷言對兩個物件圖進行深度且有序的結構比較。 它與 AreEquivalent(ICollection, ICollection)不同,後者僅檢查頂層集合的等價性,且不考慮元素順序。
比較規則如下:
- 參考相等值(包括兩者
null)被視為等價。 - 類似原始型態(數字BooleanCharString、枚舉、DateTime、DateTimeOffsetTimeSpanGuidUriType)Version與 比較。Equals(Object) 在目標上,這些框架對應它們,
DateOnly、TimeOnly、HalfInt128UInt128,也被視為原始框架。 - 如果某個值的靜態(編譯時)型別為 IEquatable<T> 自己實作, Equals(T) 則在該點停止遞迴。 純 Equals(Object) 覆寫會被忽略——比較器總是會遞迴回為這些的成員。
- 字典(、IDictionaryIDictionary<TKey, TValue> 、 或 IReadOnlyDictionary<TKey,TValue>)依照鍵集進行比較,並以遞迴方式比較值。 查詢會透過原始碼字典來執行,因此 for IEqualityComparer<T> keys 會被保留。
- 其他可枚舉(不含 String)則依迭代順序逐元素比較。 比較具有 順序敏感性;若順序無關緊要,則用於 AreEquivalent(ICollection, ICollection) 該收藏本身。
- 其他參考類型則透過遞迴進入所有公開實例屬性(使用公開 getter 且無索引參數)及公開實例欄位來比較。 靜態、非公開及索引會員則被忽略。
- 參考週期每對(預期、實際)的週期最多被追蹤和遍歷一次。 同樣的機制也強制圖拓撲:如果一側的相同參考與另一側的不同參照配對,該斷言即告失敗。
- 如果使用者定義 Equals(T)的 、 成員獲取器或字典存取(
TryGetValue、ContainsKey、 或列舉)在評估過程中拋出 ,斷言會失敗,並會收到描述例外類型與訊息的訊息。 - 比較在遞迴深度 StackOverflowException 有界後停止,以避免在異常深的物件圖上出現,並將該條件報告為斷言失敗。
適用於
AreEquivalent<T>(ReadOnlySpan<T>, ReadOnlySpan<T>, String, String, String)
測試兩個跨度在結構上是否等價(深度且對階敏感元素比較)。
public static void AreEquivalent<T>(ReadOnlySpan<T> expected, ReadOnlySpan<T> actual, string? message = "", string expectedExpression = "", string actualExpression = "");
static member AreEquivalent : ReadOnlySpan<'T> * ReadOnlySpan<'T> * string * string * string -> unit
Public Shared Sub AreEquivalent(Of T) (expected As ReadOnlySpan(Of T), actual As ReadOnlySpan(Of T), Optional message As String = "", Optional expectedExpression As String = "", Optional actualExpression As String = "")
類型參數
- T
跨度的元素類型。
參數
- expected
- ReadOnlySpan<T>
測試預期的跨度。
- actual
- ReadOnlySpan<T>
由被測程式碼產生的跨度。
- message
- String
當斷言失敗時,例外中應包含訊息。
- expectedExpression
- String
預期的語法表達式由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
- actualExpression
- String
實際的語法表達式,由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
適用於
AreEquivalent<T>(ReadOnlyMemory<T>, ReadOnlyMemory<T>, String, String, String)
測試兩個記憶區域在結構上是否等同(深度且對階敏感元素比較)。
public static void AreEquivalent<T>(ReadOnlyMemory<T> expected, ReadOnlyMemory<T> actual, string? message = "", string expectedExpression = "", string actualExpression = "");
static member AreEquivalent : ReadOnlyMemory<'T> * ReadOnlyMemory<'T> * string * string * string -> unit
Public Shared Sub AreEquivalent(Of T) (expected As ReadOnlyMemory(Of T), actual As ReadOnlyMemory(Of T), Optional message As String = "", Optional expectedExpression As String = "", Optional actualExpression As String = "")
類型參數
- T
記憶體區域的元素類型。
參數
- expected
- ReadOnlyMemory<T>
測試所期望的記憶。
- actual
- ReadOnlyMemory<T>
被測試程式碼產生的記憶體。
- message
- String
當斷言失敗時,例外中應包含訊息。
- expectedExpression
- String
預期的語法表達式由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。
- actualExpression
- String
實際的語法表達式,由編譯器透過呼叫者參數表達式給出。 使用者不應該傳遞這個參數的值。