Модульное тестирование универсального метода

Я написал свой собственный общий связанный список и хотел протестировать различные методы. Например, у меня есть метод 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, для которого метод Contains() возвращает false, а тест завершается неудачно.

Я новичок в модульном тестировании и не знаю, как протестировать такой общий метод. Может ли кто-нибудь сказать мне, какие изменения требуются в методе тестирования, особенно в строках TODO ??

Спасибо


person Hitesh P    schedule 10.09.2013    source источник
comment
Вы не можете использовать методы модульного тестирования, которые не компилируются.   -  person It'sNotALie.    schedule 10.09.2013
comment
весь код моего связанного списка компилируется   -  person Hitesh P    schedule 10.09.2013


Ответы (1)


Измените метод, чтобы получить значение экземпляра универсального типа, как показано ниже.

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");
person Dan Hunex    schedule 10.09.2013
comment
Что именно получится в строке TODO - T item = default(T); Не могли бы вы - person Hitesh P; 10.09.2013