Testování částí pro obecné metody
Je možné generovat testy jednotek pro obecné metody přesně tak, jak je tomu u jiných metod, jak je popsáno v Jak: vytvoření a spuštění testu jednotky.Následující oddíly poskytují informace a příklady pro vytvoření jednotky testy pro obecné metody.
Argumenty typu a typ omezení.
Při Visual Studio generuje test jednotky pro obecnou třídu, jako MyList<T>, generuje dvě metody: Obecná podpůrná a zkušební metody.Pokud MyList<T> má jedno nebo více omezení typu, argument typu musí splňovat všechna omezení typu.A ujistěte se, že obecného kódu pod test funguje podle očekávání pro všechny možné vstupy, zkušební metoda volá metodu obecný pomocnou všechna omezení, které chcete testovat.
Příklady
Následující příklady ilustrují testování pro obecné typy:
Úpravy generován kód Test.Tento příklad obsahuje dva oddíly, generovaný kód zkušební a testovací kód upravit.Ukazuje, jak upravit raw testovacího kódu, který je generován z obecné metody do vhodné zkušební metody.
Pomocí omezení typu.Tento příklad ukazuje test jednotky pro obecnou metodu, která používá typ omezení.V tomto příkladu není splněna omezení typu.
Příklad 1: Úpravy kódu vygenerovaný testovací
Testovací kód v této části zkoušky kódu v rámci zkušební metodu 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 Testovací kód vygenerované ukazuje neupravená testovací kód jako byla generována pomocí Visual Studio Premium nebo Visual Studio Ultimate.Druhý vzorek, v části upravený kód Test, popisuje, že jste mohl testovat fungování metody SizeOfLinkedList pro dva různé datové typy, int a char.
Tento kód ukazuje dvě metody:
zkušební metoda helper, SizeOfLinkedListTestHelper<T>().Standardně má pomocnou metodu test "TestHelper" v názvu.
zkušební metoda, SizeOfLinkedListTest().Každé zkušební metoda je označena atributem TestMethod.
Kód generovaný Test
Následující test kód byl generován z SizeOfLinkedList() metody.Vzhledem k tomu, že toto je neupravená generovaný test, musí být upravena 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ředchozím kódu parametr obecného typu je GenericParameterHelper.Vzhledem k tomu, jak je znázorněno v následujícím příkladu poskytnout specifické datové typy můžete upravovat, můžete spustit test bez úprav tohoto prohlášení.
Upravit kód Test
V následujícím kódu, byl upraven zkušební metody a pomocné zkušební metody tak, aby byly úspěšně zkušební kód podle zkušební metody SizeOfLinkedList().
Zkušební metoda Helper
Pomocnou metodu test provádí následující kroky, které odpovídají řádkům v kódu označeny kroky 1 až 5.
Vytvořte propojený seznam pro obecné.
Přidejte čtyři uzly do propojeného seznamu.Datový typ obsahu z těchto uzlů neznámý.
Očekávaná velikost propojeného seznamu přiřadit proměnné expected.
Vypočítat skutečná velikost propojený seznam a přiřaďte ji proměnné actual.
Porovnání actual s expected v příkazu Assert.Pokud skutečná není rovna očekávané, se test nezdaří.
Zkušební metody
Zkušební metoda je zkompilován kód, který je volána, když spustíte test s názvem SizeOfLinkedListTest.Provede následující kroky, které odpovídají řádkům v kódu označeny kroky 6 a 7.
Zadejte <int> při volání test pomocnou metodu, chcete-li ověřit, zda test pracuje pro integer proměnné.
Zadejte <char> při volání test pomocnou metodu, chcete-li ověřit, zda test pracuje 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 spuštění testu SizeOfLinkedListTest jeho TestHelper metoda je volána dvakrát.Assert prohlášení musí být vyhodnocen na hodnotu true, pokaždé, když pro testování úspěšné.Jestliže se test nezdaří, nemusí být jasně specifikovaných volání, <int> nebo volání zadaná <char> způsobila selhání.Odpovědi, může prozkoumat zásobníku volání nebo můžete nastavit zarážky v zkušební metody a potom laďte během testu.Další informace naleznete v tématu Postupy: Ladění během zpracování testu v řešení technologie ASP.NET.
Příklad 2: Použití omezení typu
Tento příklad ukazuje test jednotky pro obecné metody, která používá typ omezení, který není splněna.První část ukazuje kód od kódu v rámci zkušebního projektu.Omezení typu zvýrazněn.
Druhá část zobrazuje kód ze zkušebního projektu.
Kód v rámci 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 u všech nově vytvořeného testování je nutné přidat příkazy neprůkazné Assert zkoušené jednotky vrátíte užitečné výsledky.Jste nepřidali je metoda s atributem TestMethod, ale "TestHelper" metoda, která pro tuto zkoušku se nazývá DataTestHelper<T>().
V tomto příkladu parametr obecného typu T s omezením where T : Employee.Toto omezení není splněn ve zkušební metody.Proto DataTest() obsahuje metodu Assert prohlášení, která upozorňuje na povinnost poskytovat omezení typu, které bylo umístěno na T.Zpráva tohoto vyhodnocení údajů 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, když zavoláte DataTestHelper<T>() ze zkušební metoda, metoda DataTest(), musí předat parametr typu Employee nebo třídy odvozené z 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ěřování kódu pomocí testování částí