2012-02-20 76 views
0

哪些對象類型最適合爲通用集合編寫單元測試?顯然,如果我在我的應用程序中以特定方式使用它們,最好使用這些類型進行測試。但是,如果我不是,只是創建一個實用程序庫,我應該使用哪些類型?我應該使用什麼對象類型來測試泛型集合?

我試圖避免任何特定對象類型的陷阱。例如,在測試通用字典結構時,我知道GetHashCodeEquals方法對於確保有效的測試非常重要。我擔心,如果我只是使用虛擬object實例(var a = new object();),那麼遇到這些方法的問題不夠健壯。

我正在考慮對我的所有單元測試使用GUID實例,因爲它們必然有唯一的約束。然而,作爲結構,我不能測試相同的參考,如果我需要。

最後,在使用特定對象實現(如objectGUID)替代泛型類型以進行單元測試時是否還有其他需要注意的問題?

+0

很奇怪的問題。以什麼方式測試?單元測試?這取決於你正在測試的是什麼,不是嗎?如果你需要一些實現GetHashCode和Equals的東西,那麼確保你使用了這樣做的東西..你只是在尋找一個類型列表呢? – 2012-02-20 23:00:41

+0

@ KierenJohnstone-I編輯我的問題,指定單元測試,並希望澄清我的意圖。 – dlras2 2012-02-20 23:10:38

回答

2

如果您想徹底的,你應該有幾種類型的測試:

  1. 值類型,如int
  2. 它使用了參照平等
  3. 引用類型與重寫Equals引用類型+ GetHashCode
  4. IEqualityComparer<T>
  5. double或傳遞爲他們的奇怪的NaN語義。

不是每一個測試都需要完成所有的測試。但我會爲他們每個添加至少一個測試。

+0

+1。這看起來像我在找什麼。你將如何爲使用引用相等的引用類型實現'GetHashCode'?另外,你能解釋一下奇怪的'NaN'語義是什麼意思嗎? – dlras2 2012-02-20 23:28:17

+0

'你會如何爲使用引用相等的引用類型實現GetHashCode?'它已經被實現。無需重寫。 – CodesInChaos 2012-02-20 23:31:16

+0

所以你說默認的'GetHashCode'實現使用對象的引用? – dlras2 2012-02-20 23:32:19

-2

如果你的意思是你想測試System.Collections命名空間的泛型集合,那麼這是一個錯誤的測試方法。

你的測試應該只包括你的代碼,但不包括你未開發的其他東西。

+0

我正在開發自己的集合庫,它經常使用'System.Collections'對象。 (無論如何,這應該是一個評論。) – dlras2 2012-02-20 23:15:55

+0

不,這是建議您更正您的方法的答案。結果並非如此。 – Tengiz 2012-02-20 23:20:10

0

你可以使用ArrayList。用自定義對象填充它,其中一個是像主鍵那樣的整數,其他則是您的數據。這不是一個通用的集合,但非常方便使用。

class MyObject 
    { 
     public int myPrimaryKey {get; set;} 
     public object myData {get; set;} 
    { 

然後,所有你需要做的就是把它添加到一個ArrayList:

var a = new ArrayList(); 
    a.add(new MyObject{myPrimaryKey = 1, object = 'some value'}); 

希望這是你所期待的。

+0

爲什麼'ArrayList'?他不太可能使用.net 1.x.除了遺留場景外,我沒有理由選擇'ArrayList'而不是'List '。 (或一些非常具體的情況) – CodesInChaos 2012-02-20 23:22:43

+0

我不確定你在這裏建議的是什麼..這將如何最好地測試通用集合? – dlras2 2012-02-20 23:24:51