3

カスタム汎用リンク リストを作成し、さまざまなメソッドをテストしたいと考えていました。たとえば、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
    }

ただし、default(T) が null を返し、Contains() メソッドが false を返し、テストが失敗するため、AddTestHelper または AddTestHelper は失敗します。

単体テストは初めてで、このようなジェネリック メソッドをテストする方法がわかりません。特にTODO行のTestメソッドでどのような変更が必要か誰か教えてもらえますか??

ありがとう

4

1 に答える 1

4

以下に示すように、ジェネリック型のインスタンス値を取得するようにメソッドを変更します。

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");
于 2013-09-10T19:38:58.110 に答える