2013-01-09 73 views
3

我有一堂課,我們將其稱爲Foo,這是一個值類型,因此會覆蓋方法Equals/GetHashCode()方法。在單獨的測試夾具中,我想聲明Foo上的所有屬性都已正確設置,而不僅僅是用於相等的屬性。出於這個原因,我的測試斷言專門使用了ShouldBeEquivalentTo方法,如果「兩個對象圖具有同樣命名的具有相同值的屬性,而不考慮這些對象的類型,文檔建議將兩個對象視爲等同」。FluentAssertions:ShouldBeEquivalentTo方法仍然調用Object.Equals()?

然而,看起來ShouldBeEquivalentTo調用Foo.Equals方法,得到一個真實的結果,然後繼續短路基於反射的屬性匹配的承諾。

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

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

+0

我不完全明白你想要做什麼。該對象是否與您正在調用ShouldBeEquivalentTo()的對象相似? –

+2

爲了將來的參考,丹尼斯在這裏解決了這個問題:http://fluentassertions.codeplex.com/discussions/428950,表示行爲改變了2.1 – argaz

+0

Argaz,如果你把你的評論變成答案,我會接受它。 –

回答

0

我認爲你不能改變這個函數的行爲,它假定如果你覆蓋Equals - 比你想比較的方式是相同的。你可以嘗試以下功能:

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

或者你可以在Foo類NativeEquals方法,將調用base.Equals()實現,然後明確使用此方法比較,它會爲值類型工作的偉大。

+1

將不起作用,因爲SharedProperties()在內部使用與ShouldBeEquivalentTo()相同的引擎。我知道,因爲我設計了它...... –

相關問題