2013-09-10 74 views
2

我寫了我的自定義通用鏈表,並且想測試各種方法。例如,我有Contains方法單元測試通用方法

public bool Contains(T item) 
    { 
     lock (this) 
     { 
      Node<T> currentNode = firstNode; 
      while (currentNode != null) 
      { 
       if (currentNode.Item != null) 
       { 
        if (currentNode.Item.Equals(item)) 
        { 
         return true; 
        } 
       } 
       currentNode = currentNode.Next; 
      } 
      return false; 
     } 
    } 

我使用MSTest爲此生成單元測試,從而生成此存根。 我不知道我應該把什麼TODO行?

public void AddTestHelper<T>() 
    { 
     LinkedList<T> target = new LinkedList<T>(); // TODO: Initialize to an appropriate value 
     T item = default(T); // TODO: Initialize to an appropriate value 
     target.Add(item); 
     Assert.AreEqual(target.Contains(item), true); 
    } 

    [TestMethod()] 
    public void AddTest() 
    { 
     AddTestHelper<int>(); // my lines 
     AddTestHelper<object>(); //my lines 
    } 

然而AddTestHelper或AddTestHelper失敗作爲默認(T)給出了爲null其含有()方法返回false和測試失敗。

我是新來的單元測試,並不知道如何測試這樣的泛型方法。有人可以告訴我在測試方法中特別需要在TODO行中進行哪些更改?

感謝

+2

您不能單元測試不編譯的方法。 –

+0

我的鏈表的所有代碼編譯 –

回答

3

變化採取泛型類型實例值如下圖所示

public void AddTestHelper<T>(T item) 
    { 
    LinkedList<T> target = new LinkedList<T>();  
    target.Add(item); 
    Assert.AreEqual(target.Contains(item), true); 
    } 

所以在代碼中使用實例的方法,而不是

所以在您的測試ü可以做

AddTestHelper<int>(12);  

AddTestHelper<string>("Test"); 
+0

在TODO行會得到什麼 - T item = default(T); 你能 –

+0

我更新了代碼@hitesh –

+0

這很棒。 –