在我當前的項目中,我有幾個IEqualitycomparers。
這些對象具有多個屬性並進行比較。
屬性可以是相等的,也可以是不同的,這既適用於值,也適用於空值。考慮開發人員時間的單元測試GetHashCode
我想單元測試這些,但所有不同的可能性都是瘋狂的。 如何有效測試這些?
更新
目前他們得到他們通過屬性和值不會作爲構造他們充滿entlib的數據塊。
例如(在vb.net,但我跟C#太):
Public Class GuarantyEqualityComparer
Implements IEqualityComparer(Of Guaranty)
Public Overloads Function Equals(x As Guaranty, y As Guaranty) As Boolean Implements IEqualityComparer(Of Guaranty).Equals
Return x.ClientCode = y.ClientCode AndAlso x.LocationCode = y.LocationCode AndAlso x.CategoryCode = y.CategoryCode AndAlso x.GuarantyCode = y.GuarantyCode
End Function
Public Overloads Function GetHashCode(obj As Guaranty) As Integer Implements IEqualityComparer(Of Guaranty).GetHashCode
Const format As String = "{0}{1}{2}{3}"
Return String.Format(CultureInfo.InvariantCulture, format, obj.ClientCode, obj.LocationCode, obj.CategoryCode, obj.GuarantyCode).GetHashCode()
End Function
End Class
順便說一句,這真的不是生成哈希碼的好方法。 +1對於一個有用的問題:) –
你能告訴我們更多關於你正在比較的類型是如何構建的嗎?例如,是否總會有一個構造函數與所有相關的部分? –
當前沒有要求這些值的構造函數。它們可以爲null。關於你的話:真的,我記得現在有一個關於好hashcode的答案或文章。說實話,所有的平等和散列碼系統一直困擾着我。 –