簡體   English   中英

FluentAssertions:ShouldBeEquivalentTo方法仍然調用Object.Equals()?

[英]FluentAssertions: ShouldBeEquivalentTo method still invokes Object.Equals()?

我有一個類,我們稱之為Foo ,這是一個值類型,因此會覆蓋Equals / GetHashCode()方法。 在一個單獨的測試夾具中,我想斷言Foo上的所有屬性都已正確設置,而不僅僅是用於相等的屬性。 出於這個原因,我的測試斷言專門使用了ShouldBeEquivalentTo方法,文檔建議將兩個對象視為等效,如果“兩個對象圖具有相同值的相同屬性,無論這些對象的類型如何”。

但是,似乎ShouldBeEquivalentTo調用Foo.Equals方法,得到一個真實的結果,然后繼續短路基於反射的屬性匹配, ShouldBeEquivalentToShouldBeEquivalentTo承諾的。

這是預期的行為嗎? 如果是這樣,在檢查FA源時,我看到沒有簡單的方法來改變這種行為( IEquivalencyStep被聲明為內部)。 還有其他方法來解決這個問題嗎?

編輯:丹尼斯:是的,我正在比較的兩個對象屬於同一類型。 總而言之,我已經在類Foo上覆蓋了Equals ,但是不希望FA在我的單元測試中使用這種相等的概念。

我認為你不能改變這個函數的行為,它假設你重寫Equals - 比你想要的比較方式相同。 您可以嘗試以下功能:

dto.ShouldHave().SharedProperties().EqualTo(foo);

或者你可以在Foo類的NativeEquals方法中實現,它將調用base.Equals() ,然后顯式地使用這個方法進行比較,它對於值類型非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM