Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
MSTest používá vlastní atributy k identifikaci a přizpůsobení testů.
Abychom vám pomohli poskytnout přehlednější přehled o testovacím rozhraní, tato část uspořádá členy Microsoft.VisualStudio.TestTools.UnitTesting oboru názvů do skupin souvisejících funkcí.
Poznámka:
Atributy, jejichž názvy končí atributem "Attribute", lze na konci použít s atributem nebo bez atributu. Atributy, které mají konstruktor bez parametrů, lze zapsat pomocí závorek nebo bez závorek. Následující příklady kódu fungují identicky:
[TestClass()]
[TestClassAttribute()]
[TestClass]
[TestClassAttribute]
Atributy používané k identifikaci tříd a metod testů
Každá testovací třída musí mít TestClass
atribut a každá testovací metoda musí mít TestMethod
atribut.
TestClassAttribute
Atribut TestClass označuje třídu, která obsahuje testy a volitelně inicializovat nebo vyčistit metody.
Tento atribut lze rozšířit, aby se změnilo nebo rozšířilo výchozí chování.
Příklad:
[TestClass]
public class MyTestClass
{
}
TestMethodAttribute
Atribut TestMethod se používá uvnitř a TestClass
definuje skutečnou testovací metodu, která se má spustit.
Metoda by měla být metoda instance public
definovaná jako void
, Task
nebo ValueTask
(počínaje msTest v3.3). Volitelně to může být async
, ale nemělo by to být async void
.
Metoda by měla mít nulové parametry, pokud není označena atributem DataRow, atributem DynamicData nebo podobným atributem, který poskytuje testovací případová data testovací metodě.
Podívejte se na následující příklad testovací třídy:
[TestClass]
public class MyTestClass
{
[TestMethod]
public void TestMethod()
{
}
}
Atributy používané pro testování řízené daty
K nastavení testů řízených daty použijte následující prvky. Další informace najdete v tématu Vytvoření testu jednotek řízeného daty a použití konfiguračního souboru k definování zdroje dat.
Návod
MSTest nativně nepodporuje kombinatorické testování, ale tuto funkci můžete přidat pomocí opensourcového balíčku Combinatorial.MSTest NuGet. Aktivně ji udržuje komunita a je dostupná na GitHubu. Tento balíček neudržuje Microsoft.
DataRowAttribute
Atribut DataRow umožňuje spustit stejnou testovací metodu s více různými vstupy. Může se zobrazit jednou nebo vícekrát v testovací metodě. Měl by být kombinován s atributem TestMethod.
Počet a typy argumentů musí přesně odpovídat podpisu testovací metody. Podívejte se na následující příklad platné třídy testů, která demonstruje použití DataRowAttribute s vloženými argumenty, které odpovídají parametrům testovací metody:
[TestClass]
public class TestClass
{
[TestMethod]
[DataRow(1, "message", true, 2.0)]
public void TestMethod1(int i, string s, bool b, float f)
{
// Omitted for brevity.
}
[TestMethod]
[DataRow(new string[] { "line1", "line2" })]
public void TestMethod2(string[] lines)
{
// Omitted for brevity.
}
[TestMethod]
[DataRow(null)]
public void TestMethod3(object o)
{
// Omitted for brevity.
}
[TestMethod]
[DataRow(new string[] { "line1", "line2" }, new string[] { "line1.", "line2." })]
public void TestMethod4(string[] input, string[] expectedOutput)
{
// Omitted for brevity.
}
}
Poznámka:
Funkci můžete použít params
také k zachycení více vstupů DataRowAttribute.
[TestClass]
public class TestClass
{
[TestMethod]
[DataRow(1, 2, 3, 4)]
public void TestMethod(params int[] values) {}
}
Příklady neplatných kombinací:
[TestClass]
public class TestClass
{
[TestMethod]
[DataRow(1, 2)] // Not valid, we are passing 2 inline data but signature expects 1
public void TestMethod1(int i) {}
[TestMethod]
[DataRow(1)] // Not valid, we are passing 1 inline data but signature expects 2
public void TestMethod2(int i, int j) {}
[TestMethod]
[DataRow(1)] // Not valid, count matches but types do not match
public void TestMethod3(string s) {}
}
Poznámka:
Počínaje msTest v3, pokud chcete předat přesně 2 matice, už nemusíte zabalit druhé pole do pole objektu.
Před:[DataRow(new string[] { "a" }, new object[] { new string[] { "b" } })]
Začátek s v3:[DataRow(new string[] { "a" }, new string[] { "b" })]
Zobrazovaný název použitý v sadě Visual Studio a protokolovací nástroje pro každou instanci DataRowAttribute můžete upravit nastavením DisplayName vlastnosti.
[TestClass]
public class TestClass
{
[TestMethod]
[DataRow(1, 2, DisplayName = "Functional Case FC100.1")]
public void TestMethod(int i, int j) {}
}
Můžete také vytvořit vlastní specializovaný atribut DataRow
děděním DataRowAttribute.
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class MyCustomDataRowAttribute : DataRowAttribute
{
}
[TestClass]
public class TestClass
{
[TestMethod]
[MyCustomDataRow(1)]
public void TestMethod(int i) {}
}
Atributy používané k inicializaci a vyčištění
Nastavení a vyčištění, které je běžné pro více testů, lze extrahovat do samostatné metody a označit jedním z níže uvedených atributů, aby bylo možné ho spustit v odpovídající dobu, například před každým testem. Další informace naleznete v tématu Anatomie testu jednotek.
Úroveň sestavení
Atribut AssemblyInitialize je volán hned po načtení sestavení a atribut AssemblyCleanup je volán přímo před uvolněním sestavení.
Metody označené těmito atributy by měly být definovány jako static void
, static Task
nebo static ValueTask
(počínaje MSTest v3.3), ve třídě označené TestClassAttributea zobrazí se pouze jednou. Inicializační část vyžaduje jeden parametr typu TestContext a vyčištění buď nevyžaduje žádné parametry, nebo počínaje verzí MSTest 3.8 může obsahovat jeden parametr typu TestContext.
[TestClass]
public class MyTestClass
{
[AssemblyInitialize]
public static void AssemblyInitialize(TestContext testContext)
{
}
[AssemblyCleanup]
public static void AssemblyCleanup() // Starting with MSTest 3.8, it can be AssemblyCleanup(TestContext testContext)
{
}
}
Úroveň třídy
Atribut ClassInitialize je volána přímo před načtením třídy (ale po statickém konstruktoru) a ClassCleanup je volána přímo po uvolnění třídy.
Důležitý
Ve výchozím nastavení se ClassCleanupAttribute aktivuje po posledním testu sestavení (podobně jako AssemblyCleanupAttribute). Toto chování můžete změnit nastavením CleanupBehavior u atributu. Alternativně můžete toto chování pro sestavení nastavit globálně pomocí atributu sestavení ClassCleanupExecutionAttribute.
Je také možné řídit chování dědičnosti: pouze pro aktuální třídu pomocí InheritanceBehavior.None, nebo pro všechny odvozené třídy pomocí InheritanceBehavior.BeforeEachDerivedClass.
Metody označené těmito atributy by měly být definovány jako static void
, static Task
nebo static ValueTask
(počínaje MSTest v3.3), v TestClass
a a zobrazí se pouze jednou. Inicializační část vyžaduje jeden parametr typu TestContext a vyčištění buď nevyžaduje žádné parametry, nebo počínaje verzí MSTest 3.8 může obsahovat jeden parametr typu TestContext.
[TestClass]
public class MyTestClass
{
[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
}
[ClassCleanup]
public static void ClassCleanup() // Starting with MSTest 3.8, it can be ClassCleanup(TestContext testContext)
{
}
}
Úroveň testu
Atribut TestInitialize se volá těsně před spuštěním testu a TestCleanup se volá hned po dokončení testu.
Podobá TestInitializeAttribute se konstruktoru třídy, ale obvykle je vhodnější pro dlouhé nebo asynchronní inicializace. TestInitializeAttribute je vždy volána po konstruktoru a použita pro každý test (včetně každé položky testů řízených daty).
Podobá TestCleanupAttribute se třídě Dispose
(nebo DisposeAsync
), ale obvykle je vhodnější pro dlouhé nebo asynchronní čištění.
TestCleanupAttribute se vždy volá těsně před DisposeAsync
/Dispose
a volá se pro každý test (včetně každého zadání testů řízených daty).
Metody označené těmito atributy by měly být definovány jako void
, Task
nebo ValueTask
(počínaje MSTest v3.3), v TestClass
parametru , být bez parametrů a objeví se jednou nebo vícekrát.
[TestClass]
public class MyTestClass
{
[TestInitialize]
public void TestInitialize()
{
}
[TestCleanup]
public void TestCleanup()
{
}
}
Atributy používané k řízení provádění testů
Následující atributy lze použít k úpravě způsobu provádění testů.
TimeoutAttribute
Atribut časového limitu lze použít k určení maximálního času v milisekundách, který je možné spustit testovací metodou. Pokud testovací metoda poběží déle, než je zadaný čas, test se přeruší a označí jako neúspěšný.
Tento atribut lze použít pro libovolnou testovací metodu nebo jakoukoli metodu zařízení (inicializace a čištění metod). Pomocí vlastností časového limitu souboru runsettings je také možné určit globálně pro všechny testovací metody nebo pro všechny metody zkoušky.
Poznámka:
Časový limit není zaručen, že je přesný. Test bude přerušen po uplynutí zadaného času, ale může to trvat déle, než se krok zruší.
Při použití funkce časového limitu se vytvoří samostatné vlákno nebo úloha pro spuštění testovací metody. Hlavním vláknem nebo úlohou je zodpovědné monitorování časového limitu a zrušení rezervace vlákna nebo úlohy metody, pokud dojde k vypršení časového limitu.
Od MSTest 3.6 je možné zadat CooperativeCancellation vlastnost atributu (nebo globálně prostřednictvím runsettings), aby bylo možné zrušit spolupráci. V tomto režimu je metoda zodpovědná za kontrolu tokenu zrušení a přerušení testu, pokud je signalizovat, jako byste to udělali v typické async
metodě. Tento režim je výkonnější a umožňuje přesnější kontrolu nad procesem zrušení. Tento režim lze použít pro asynchronní i synchronizační metody.
STATestClassAttribute
Při použití na testovací třídu STATestClass atribut indikuje, že všechny testovací metody (a metody [ClassInitialize]
a [ClassCleanup]
) ve třídě by měly být spuštěny v jednom vlákně (STA). Tento atribut je užitečný, když testovací metody pracují s objekty MODELU COM, které vyžadují STA.
Poznámka:
To se podporuje jenom ve Windows a ve verzi 3.6 a novější.
STATestMethodAttribute
Při použití na testovací metodu atribut STATestMethod indikuje, že tato metoda by měla být spuštěna v jednovláknovém apartmánu (STA). Tento atribut je užitečný, když testovací metoda komunikuje s objekty MODELU COM, které vyžadují STA.
Poznámka:
To se podporuje jenom ve Windows a ve verzi 3.6 a novější.
ParallelizeAttribute
Ve výchozím nastavení msTest spouští testy v sekvenčním pořadí. Atribut úrovně sestavení Paralelizovat atribut lze použít ke paralelnímu spouštění testů. Můžete určit, zda má být paralelismus na úrovni třídy (může být spuštěno paralelně, ale testy v dané třídě jsou spouštěny postupně) nebo na úrovni metody.
Je také možné zadat maximální počet vláken, která se mají použít pro paralelní spuštění. Hodnota 0
(výchozí hodnota) znamená, že počet vláken se rovná počtu logických procesorů na počítači.
Paralelismus je také možné určit pomocí vlastností paralelizace souboru runsettings.
DoNotParallelizeAttribute
Atribut DoNotParallelize lze použít k zabránění paralelnímu provádění testů v daném sestavení. Tento atribut lze použít na úrovni sestavení, na úrovni třídy nebo na úrovni metody.
Poznámka:
Ve výchozím nastavení msTest spouští testy v sekvenčním pořadí, takže tento atribut stačí použít pouze v případě, že jste použili úroveň sestavení Paralelizovat atribut.
RetryAttribute
Atribut Retry
byl zaveden v MSTest 3.8. Tento atribut způsobí, že se testovací metoda bude opakovat, když selže nebo dojde k vypršení časového limitu. Umožňuje zadat maximální počet pokusů o opakování, časové zpoždění mezi pokusy a typ prodlevy, který může být konstantní nebo exponenciální.
U testovací metody se očekává pouze jeden RetryAttribute
a RetryAttribute
nelze použít u metod, které nejsou označené testMethod.
Poznámka:
RetryAttribute
vychází z abstraktního RetryBaseAttribute
. Můžete také vytvořit vlastní implementace opakovávání, pokud integrovaná RetryAttribute
nevyhovuje vašim potřebám.
Atributy nástrojů
DeploymentItemAttribute
Atribut DeploymentItem se používá ke kopírování souborů nebo složek zadaných jako položky nasazení do adresáře nasazení (bez přidání vlastní výstupní cesty ke zkopírovaným souborům budou v TestResults
složce projektu). V adresáři nasazení jsou přítomny všechny položky nasazení společně s knihovnou DLL testovacího projektu.
Lze ho použít buď pro třídy testů (třídy označené atributem TestClass), nebo u testovacích metod (metody označené atributem TestMethod).
Uživatelé mohou mít více instancí atributu, které určují více než jednu položku.
A tady vidíte jeho konstruktory.
Příklad
[TestClass]
[DeploymentItem(@"C:\classLevelDepItem.xml")] // Copy file using some absolute path
public class UnitTest1
{
[TestMethod]
[DeploymentItem(@"..\..\methodLevelDepItem1.xml")] // Copy file using a relative path from the dll output location
[DeploymentItem(@"C:\DataFiles\methodLevelDepItem2.xml", "SampleDataFiles")] // File will be added under a SampleDataFiles in the deployment directory
public void TestMethod1()
{
string textFromFile = File.ReadAllText("classLevelDepItem.xml");
}
}
Upozorňující
Nedoporučujeme používat tento atribut ke kopírování souborů do adresáře nasazení.
ExpectedExceptionAttribute
Atribut ExpectedException definuje výjimku, kterou má metoda testu vyvolat. Test projde, pokud je vyvolána očekávaná výjimka a zpráva o výjimce odpovídá očekávané zprávě.
Upozorňující
Tento atribut existuje pro zpětnou kompatibilitu a nedoporučuje se pro nové testy. Místo toho použijte Assert.ThrowsException
(nebo Assert.ThrowsExactly
, pokud používáte MSTest 3.8 a novější).
Atributy metadat
Následující atributy a hodnoty, které jsou jim přiřazeny, se zobrazí v Visual Studio
okně Vlastnosti pro konkrétní testovací metodu. Tyto atributy nemají být přístupné prostřednictvím kódu testu. Místo toho ovlivňují způsoby použití nebo spuštění testu buď prostřednictvím integrovaného vývojového prostředí sady Visual Studio, nebo testovacího modulu sady Visual Studio. Některé z těchto atributů se například zobrazují jako sloupce v okně Správce testů a v okně Výsledky testů, což znamená, že je můžete použít k seskupení a řazení testů a výsledků testů. Jedním z takových atributů je TestPropertyAttribute, který použijete k přidání libovolných metadat do testů.
Můžete ho například použít k uložení názvu "testovacího úspěšného", který tento test pokrývá, tím, že test označíte značkou [TestProperty("Feature", "Accessibility")]
. Nebo ho můžete použít k uložení indikátoru druhu testu, se kterým [TestProperty("ProductMilestone", "42")]
je . Vlastnost, kterou vytvoříte pomocí tohoto atributu, a hodnotu vlastnosti, kterou přiřadíte, se zobrazí v okně Vlastnosti sady Visual Studio pod nadpisem Test specifické.
- DescriptionAttribute
- IgnoreAttribute
- OwnerAttribute
- PriorityAttribute
- TestCategoryAttribute
- TestPropertyAttribute
- WorkItemAttribute
Následující atributy souvisejí s testovací metodou, kterou vyzdobují entitám v hierarchii Team Foundation Server
projektu týmu: