Udostępnij za pośrednictwem


Testy jednostkowe metod ogólnych

Można wygenerować jednostki badań dla metody rodzajowe dokładnie tak jak w przypadku innych metod, zgodnie z opisem w Jak: Utwórz i uruchom Test jednostki.Poniższe sekcje zawierają informacje i przykłady tworzenia jednostki badań dla metody rodzajowe.

Argumenty typu i ograniczenia typu

Gdy Visual Studio generuje test jednostki dla klasy rodzajowe, takie jak MyList<T>, generuje dwie metody: generic pomocnika i metody badawcze.Jeśli MyList<T> ma jeden lub więcej ograniczenia typu, argument typu musi spełniać wszystkie ograniczenia typu.Aby upewnić się, że rodzajową kod pod test działa zgodnie z oczekiwaniami produkcji wszystkich dopuszczalne, metody badania wywołuje metodę rodzajowy pomocnika z ograniczeniami, które chcesz przetestować.

Przykłady

Poniższe przykłady ilustrują testy dla produktów pierwotnych:

  • Edycja wygenerowany kod testu.W tym przykładzie ma dwie sekcje, wygenerowany kod badania i edytować kod badania.To pokazuje, jak edytować kod surowego test, który jest generowany na podstawie metody rodzajowej do metody badania przydatne.

  • Za pomocą ograniczenia typu.W tym przykładzie przedstawiono test jednostki używający ograniczenie typu metody rodzajowej.W tym przykładzie ograniczenie typu nie jest spełniony.

ms243401.collapse_all(pl-pl,VS.110).gifPrzykład 1: Edycji wygenerowanego kodu testu

Kod badania w tej sekcji testów metodę kodu w obszarze badania, o nazwie SizeOfLinkedList().Ta metoda zwraca wartość całkowitą, która określa liczbę węzłów w połączonej listy.

Pierwszy przykładowy kod w sekcji kodu testu wygenerowane, pokazuje kod wykasowane test został wygenerowany przez Visual Studio Premium lub Visual Studio Ultimate.Druga próbka, w sekcji kodu testu edytowane, pokazuje, jak można utworzyć ją przetestować działanie metody SizeOfLinkedList dla dwóch różnych typów danych, int i char.

Ten kod ilustruje dwie metody:

  • Metoda helper SizeOfLinkedListTestHelper<T>().Metody pomocnika test ma domyślnie "TestHelper" w jego nazwę.

  • Metoda badania, SizeOfLinkedListTest().Każda metoda badania jest oznaczony atrybutem TestMethod.

ms243401.collapse_all(pl-pl,VS.110).gifWygenerowany kod testu

Poniższy kod test został wygenerowany z SizeOfLinkedList() metody.Ponieważ wykasowane generowanych badania muszą zostać zmienione aby poprawnie metoda SizeOfLinkedList badania.

public void SizeOfLinkedListTestHelper<T>()
{
    T val = default(T); // TODO: Initialize to an appropriate value
    MyLinkedList<T> target = new MyLinkedList<T>(val); // TODO: Initialize to an appropriate value
    int expected = 0; // TODO: Initialize to an appropriate value
    int actual;
    actual = target.SizeOfLinkedList();
    Assert.AreEqual(expected, actual);
    Assert.Inconclusive("Verify the correctness of this test method.");
}

[TestMethod()]
public void SizeOfLinkedListTest()
{
   SizeOfLinkedListTestHelper<GenericParameterHelper>();
}

W poprzednim kodzie parametr typu rodzajowego jest GenericParameterHelper.Należy go do dostaw określonych typów danych, można edytować, jak pokazano w poniższym przykładzie, można uruchomić test bez konieczności edytowania tej instrukcji.

ms243401.collapse_all(pl-pl,VS.110).gifEdytowany kodu testu

W poniższym kodzie metody badań i metody pomocnika test był edytowany aby uczynić je pomyślnie metoda badania kodu na obszarze badania SizeOfLinkedList().

ms243401.collapse_all(pl-pl,VS.110).gifMetoda pomocnika

Metoda badania pomocnika wykonuje następujące kroki, które odpowiadają wierszom w kodzie oznaczone kroki od 1 do 5.

  1. Utwórz listę połączonych rodzajowy.

  2. Czterech węzłów należy dołączyć do połączonej listy.Typ danych treści tych węzłów jest nieznany.

  3. Przewidywany rozmiar połączonej listy należy przypisać zmiennej expected.

  4. Obliczyć rzeczywisty rozmiar połączonej listy i przypisać zmiennej actual.

  5. Porównaj actual z expected w instrukcji Assert.Jeśli rzeczywiste nie jest równa oczekiwane, badanie nie powiedzie się.

ms243401.collapse_all(pl-pl,VS.110).gifMetoda badania

Metoda badania jest skompilowany do kodu, która jest wywoływana po uruchomieniu testu, o nazwie SizeOfLinkedListTest.Wykonuje następujące kroki, które odpowiadają wierszom w kodzie oznaczone krok 6 i 7.

  1. Określ <int> podczas wywołania metody pomocnika test, aby sprawdzić, czy test działa dla integer zmiennych.

  2. Określ <char> podczas wywołania metody pomocnika test, aby sprawdzić, czy test działa dla char zmiennych.

public void SizeOfLinkedListTestHelper<T>()
{
    T val = default(T); 
    MyLinkedList<T> target = new MyLinkedList<T>(val); // step 1
    for (int i = 0; i < 4; i++) // step 2
    {
        MyLinkedList<T> newNode = new MyLinkedList<T>(val);
        target.Append(newNode);
    }
    int expected = 5; // step 3
    int actual;
    actual = target.SizeOfLinkedList(); // step 4
    Assert.AreEqual(expected, actual); // step 5
}

[TestMethod()]
public void SizeOfLinkedListTest() 
{
    SizeOfLinkedListTestHelper<int>();  // step 6
    SizeOfLinkedListTestHelper<char>(); // step 7
}

[!UWAGA]

Uruchamia SizeOfLinkedListTest test przy każdym jego TestHelper, metoda jest wywoływana dwa razy.Instrukcja assert musi oszacować na true, co czas badania do przekazania.Jeśli test zakończy się niepowodzeniem, może nie być jasne czy wywołanie określone <int> lub określone wywołanie <char> spowodował niepowodzenie.Aby znaleźć odpowiedzi, można zbadać stosu wywołań, lub można ustawić punkty przerwania w metodę badania, a następnie debugowania podczas wykonywania badania.Aby uzyskać więcej informacji, zobacz Jak: debugowanie przy uruchamianiu testu w aplikacji ASP.Roztwór netto.

ms243401.collapse_all(pl-pl,VS.110).gifPrzykład 2: Użycie ograniczenia typu

W tym przykładzie przedstawiono test jednostki rodzajowy metodę, która używa ograniczenie typu, który nie jest spełniony.Pierwsza sekcja zawiera kod z projektu kodu w obszarze badania.Ograniczenie typu jest wyróżniony.

Druga sekcja zawiera kod z badania projektu.

ms243401.collapse_all(pl-pl,VS.110).gifKod w obszarze badania projektu

using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;

namespace ClassLibrary2
{
    public class Employee
    {
        public Employee(string s, int i)
        {
        }
    }

    public class GenericList<T> where T : Employee
    {
        private class Node
        {
            private T data;
            public T Data
            {
                get { return data; }
                set { data = value; }
            }
        }
    }
}

ms243401.collapse_all(pl-pl,VS.110).gifBadanie projektu

Podobnie jak w przypadku wszystkich nowo wygenerowanym jednostki badań, należy dodać-niejednoznaczny Assert sprawozdania do ten test jednostki, aby przywrócić użyteczne wyniki.Użytkownik nie doda je metody oznaczone atrybutem TestMethod, ale metoda "TestHelper", która nosi nazwę dla tego testu DataTestHelper<T>().

W tym przykładzie parametr typu rodzajowego T z ograniczeniem where T : Employee.To ograniczenie nie jest spełnione w metodzie badania.W związku z tym DataTest() metoda zawiera oświadczenie Assert, że alerty dotyczące wymogu dostarczania ograniczenie typu, który został umieszczony na T.Wiadomość ta instrukcja Assert otrzymuje brzmienie:("No appropriate type parameter is found to satisfies the type constraint(s) of T. " + "Please call DataTestHelper<T>() with appropriate type parameters.");

Innymi słowy, jeśli zadzwonisz DataTestHelper<T>() metody od metody badania DataTest(), trzeba przekazać parametr typu Employee lub Klasa pochodna od Employee.

using ClassLibrary2;

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace TestProject1

{
    [TestClass()]
    public class GenericList_NodeTest
    {
    
        public void DataTestHelper<T>()
            where T : Employee
        {
            GenericList_Shadow<T>.Node target = new GenericList_Shadow<T>.Node(); // TODO: Initialize to an appropriate value
            T expected = default(T); // TODO: Initialize to an appropriate value
            T actual;
            target.Data = expected;
            actual = target.Data;
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("Verify the correctness of this test method.");
        }

        [TestMethod()]
        public void DataTest()
        {
            Assert.Inconclusive("No appropriate type parameter is found to satisfies the type constraint(s) of T. " +
            "Please call DataTestHelper<T>() with appropriate type parameters.");
        }
    }
}

Zobacz też

Koncepcje

Sprawdzanie kodu za pomocą jednostki badań

Inne zasoby

Anatomia Test jednostki