Sdílet prostřednictvím


Testování částí pro obecné metody

Můžete generovat testy jednotky pro obecné metody přesně stejně jako pro jiné metody popsané v Jak: vytvoření a spuštění testu jednotky.Následující části poskytují informace a příklady vytváření testů jednotky pro obecné metody.

Argumenty typu a typ omezení

Při Visual Studio například vygeneruje test jednotky pro obecná třída MyList<T>, vygeneruje dvě metody: Obecný pomocníka a zkušební metody.Pokud MyList<T> má jedno nebo více omezení typu, argument typu musí splňovat všechny typ omezení.Chcete-li se ujistit, že obecného kódu pod test funguje podle očekávání pro všechny přípustné vstupy, zkušební metoda volá metodu obecný Pomocník s omezeními, které chcete testovat.

Příklady

Následující příklady ilustrují generics zkoušky jednotky:

  • Úpravy generován kód Test.V tomto příkladu má dvě části, generován testovací a kód upravovat Test.Ukazuje, jak upravit raw zkušební kód, který je generován z obecné metody do vhodné zkušební metody.

  • Pomocí omezení typu.Tento příklad ukazuje test jednotky pro obecné metody, která používá typ omezení.V tomto příkladu není splněna omezení typu.

ms243401.collapse_all(cs-cz,VS.110).gifPříklad 1: Úpravy generovaného kódu Test

Testovací kód v této části zkoušky kód podle zkušební metody s názvem SizeOfLinkedList().Tato metoda vrátí celé číslo určující počet uzlů v propojeném seznamu.

První ukázka kódu v části generována testovací kód zobrazuje kód neupravenou test byla generována pomocí Visual Studio Premium nebo Visual Studio Ultimate.Druhý vzorek, v části upravený kód testu, ukazuje, jak ji otestovat fungování metodu SizeOfLinkedList pro dva různé datové typy nelze vytvořit int a char.

Tento kód ukazuje dvě metody:

  • zkušební metoda pomocníka, SizeOfLinkedListTestHelper<T>().Standardně má zkušební metody pomocné "TestHelper" v názvu.

  • zkušební metoda, SizeOfLinkedListTest().Každý zkušební metoda je označena atributem TestMethod.

ms243401.collapse_all(cs-cz,VS.110).gifGenerovaný kód Test

Následující kód testu byla generována z SizeOfLinkedList() metoda.Protože neupravenou generované test je třeba upravit na správně zkušební metody SizeOfLinkedList.

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>();
}

V předcházejícím kódu je obecný typ parametru GenericParameterHelper.Vzhledem k tomu, že úpravami poskytovat specifické datové typy, jak ukazuje následující příklad, nelze spustit test bez úprav tohoto prohlášení.

ms243401.collapse_all(cs-cz,VS.110).gifUpravený kód Test

Následující kód byl upraven zkušební metody a pomocné metody tak, aby byly úspěšně kód podle zkušební metody SizeOfLinkedList().

ms243401.collapse_all(cs-cz,VS.110).gifPomocné metody

Zkušební metoda Pomocník provede následující kroky, které odpovídají řádkům v kódu označené v kroku 1 až 5.

  1. Vytvořte obecný propojeného seznamu.

  2. Čtyři uzly připojte do propojeného seznamu.Datový typ obsahu těchto uzlů neznámý.

  3. Očekávaná velikost propojeného seznamu přiřadit proměnné expected.

  4. Skutečná velikost propojeného seznamu vypočítat a přiřaďte ji proměnné actual.

  5. Porovnat actual s expected v příkazu výrazu.Skutečná není rovno očekávané, test se nezdaří.

ms243401.collapse_all(cs-cz,VS.110).gifZkušební metoda

Zkušební metoda je kompilována do kódu, který se nazývá po spuštění testu s názvem SizeOfLinkedListTest.Provede následující kroky, které odpovídají řádkům v kódu označené kroky 6 a 7.

  1. Určit <int> při volání zkušební metoda pomocníka, ověřte, že test funguje pro integer proměnné.

  2. Určit <char> při volání zkušební metoda pomocníka, ověřte, že test funguje pro char proměnné.

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
}

[!POZNÁMKA]

Při každém testu SizeOfLinkedListTest spustí, jeho TestHelper metoda je volána dvakrát.Příkaz výrazu musí být true při každém testu předat.Pokud test nezdaří, nemusí být jasné specifikovaných volání, <int> nebo volání, který je určen <char> způsobila selhání.Chcete-li najít odpověď, nelze zkontrolovat zásobník volání nebo můžete nastavit zarážky v zkušební metody a pak ladit během testu.Další informace naleznete v tématu Jak: ladění při spuštění testu v aplikaci ASP.NET řešení.

ms243401.collapse_all(cs-cz,VS.110).gifPříklad 2: Použití omezení typu

Tento příklad ukazuje test jednotky pro obecné metody, která používá typ omezení, které nejsou splněny.První část zobrazuje kód z kód podle zkušebního projektu.Omezení typu zvýrazněn.

Druhá část zobrazuje kód ze zkušebního projektu.

ms243401.collapse_all(cs-cz,VS.110).gifKód podle zkušebního 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(cs-cz,VS.110).gifProjekt testů

Stejně jako všechny testy nově vytvořeného jednotky je nutné přidat příkazy neprůkazná Assert zkoušené jednotky tak, aby vrátí užitečné výsledky.Přidávat je metoda s atributem TestMethod, ale metodu "TestHelper", která pro tento test s názvem DataTestHelper<T>().

V tomto příkladu obecného parametr typu T má omezení where T : Employee.Toto omezení není splněna ve zkušební metody.Proto DataTest() metoda obsahuje prohlášení výrazu, který upozorňuje na požadavek poskytnout omezení typu, který byl uveden na T.Zprávy tohoto prohlášení Assert se nahrazuje tímto:("No appropriate type parameter is found to satisfies the type constraint(s) of T. " + "Please call DataTestHelper<T>() with appropriate type parameters.");

Jinými slovy, při volání DataTestHelper<T>() ze zkušební metoda, metoda DataTest(), musí projít parametr typu Employee nebo Třída odvozená 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.");
        }
    }
}

Viz také

Koncepty

Ověření kódu pomocí zkoušky jednotky

Další zdroje

Anatomie Test jednotky