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.
Pří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.
Generovaný 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í.
Upravený 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().
Pomocné 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.
Vytvořte obecný propojeného seznamu.
Čtyři uzly připojte do propojeného seznamu.Datový typ obsahu těchto uzlů neznámý.
Očekávaná velikost propojeného seznamu přiřadit proměnné expected.
Skutečná velikost propojeného seznamu vypočítat a přiřaďte ji proměnné actual.
Porovnat actual s expected v příkazu výrazu.Skutečná není rovno očekávané, test se nezdaří.
Zkuš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.
Určit <int> při volání zkušební metoda pomocníka, ověřte, že test funguje pro integer proměnné.
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í.
Pří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.
Kó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; }
}
}
}
}
Projekt 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