2011-08-16 49 views
5

我有以下代碼:問題單元測試在VB.NET

<TestMethod()> _ 
Public Sub GetDirectoryEntryTest() 
    Dim path As String = runner.getLDAPPath() 
    Dim expected As DirectoryEntry = runner.GetDirectoryEntry() 
    Dim actual As DirectoryEntry 
    actual = LDAPBase.GetDirectoryEntry(path) 
    Assert.AreEqual(expected, actual) 
End Sub 

該單元測試失敗。 DirectoryEntry對象完全相同,但對不同對象的引用不同。我來自Java背景,你總是有.equals()

我該怎麼做才能正確評估並返回true,因爲對於所有意圖和目的而言,對象是平等的。有什麼我可以做,就像我會在Java中做的,並重寫equals()?

+5

所有密集目的?你的意思是所有**意圖和**目的:) – mellamokb

+0

測試看起來對我來說工作得很好。你比較的兩個對象不相等。 –

+0

@mellamokb那麼我覺得有點愚蠢之後,哈哈 – user489041

回答

5

嘗試用一些比較像這樣的對象的路徑:

Assert.AreEqual(expected.Path, actual.Path) 

這會比較底層的路徑(字符串類型),而不是對象的引用。如果路徑相同就足夠了,你不應該覆蓋任何東西。

編輯:

Object.Equals Method

的DirectoryEntry是繼承引用類型從對象等的Equals

的Equals的默認實現支持 引用類型引用相等,併爲值類型按位相等。參考 相等意味着被比較的對象引用指的是同一對象的 。按位相等意味着被比較的對象具有相同的二進制表示。

+0

所以我想這是我的問題的一部分。我的主張實際上是在比較什麼?它是比較引用,還是它在DirectoryObject中調用某種equals方法? – user489041

+0

如果調用equals方法,那並不意味着您可以獲得值比較。你仍然可以調用equals並比較引用,這可能是你的情況。 (看我的編輯。) –

2

兩個條目在什麼意義上相等?他們的ToString()是否相等?如果這足以在測試中認爲它們相等,則將兩個ToString()值相互比較。

如果您需要比較兩個DirectoryEntries,請實現自定義IEqualityComparer並使用它來比較測試中的相等性。