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.
V tomto článku se dozvíte o rozhraních API a konvencích používaných msTestem, které vám pomůžou psát a tvarovat testy.
Poznámka:
Názvy atributů končící na "Atribut" mohou používat krátkou formu.
TestClass a TestClassAttribute jsou ekvivalentní. Atributy s konstruktory bez parametrů mohou vynechat závorky.
Testovací struktura
Každá testovací třída MSTest musí mít TestClass atribut a každá testovací metoda musí mít TestMethod atribut:
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class CalculatorTests
{
[TestMethod]
public void Add_TwoNumbers_ReturnsSum()
{
// Arrange
var calculator = new Calculator();
// Act
int result = calculator.Add(2, 3);
// Assert
Assert.AreEqual(5, result);
}
}
TestClassAttribute
Označuje TestClassAttribute třídu, která obsahuje testy a volitelně inicializační nebo vyčisticí metody. Tento atribut můžete rozšířit, abyste přizpůsobili chování testovací třídy.
TestMethodAttribute
TestMethodAttribute označí metodu jako test k provedení. Testovací metody musí být:
- Metody instance (ne statické)
- Public
- Return
void,TaskneboValueTask(MSTest v3.3+) - Bez parametrů, pokud nepoužíváte atributy řízené daty
[TestClass]
public class TestMethodExamples
{
[TestMethod]
public void SynchronousTest()
{
Assert.IsTrue(true);
}
[TestMethod]
public async Task AsynchronousTest()
{
await Task.Delay(100);
Assert.IsTrue(true);
}
}
Výstraha
Nepoužívejte async void pro testovací metody. Použijte async Task nebo async ValueTask místo toho.
DiscoverInternalsAttribute
Atribut DiscoverInternalsAttribute sestavení umožňuje MSTest zjišťovat internal třídy a metody testování. Ve výchozím nastavení jsou detekovány pouze public testy. Tento atribut je zvlášť užitečný, pokud máte parametrizované testy, které jako parametry používají interní typy:
[assembly: DiscoverInternals]
internal record TestInput(int Value, string Description);
[TestClass]
public class CalculatorTests
{
internal static IEnumerable<TestInput> TestData
{
get
{
yield return new TestInput(1, "one");
yield return new TestInput(2, "two");
}
}
[TestMethod]
[DynamicData(nameof(TestData))]
internal void Add_WithTestInput_ReturnsExpected(TestInput input)
{
var calculator = new Calculator();
int result = calculator.Add(input.Value, 1);
Assert.AreEqual(input.Value + 1, result);
}
}
Bez DiscoverInternals by testovací metoda a její interní TestInput typ parametru nebyly rozpoznány spouštěčem testů.
Klíčové koncepty
Dokumentace MSTest je uspořádaná podle tématu:
| Téma | Description |
|---|---|
| Výrazy | Ověření očekávaných výsledků pomocí tříd Assert |
| Testování řízené daty | Spouštění testů s více vstupy (DataRow, DynamicData) |
| Životní cyklus testu | Nastavení a vyčištění na úrovni sestavení, třídy a testu |
| Řízení provádění | Dělení vláken, paralelizace, vypršení časových limitů, opakování a podmíněné spuštění |
| Testovací organizace | Kategorie, priority, vlastníci a metadata |
| TestContext | Přístup k informacím o běhu testu |
Stručná referenční příručka k atributu
| Kategorie | Atributy | Podívejte se |
|---|---|---|
| Identifikace testu |
TestClass, TestMethodDiscoverInternals |
Tato stránka |
| Řízené daty |
DataRow, DynamicDataTestDataRow |
Testování řízené daty |
| Životní cyklus |
AssemblyInitialize, ClassInitialize, TestInitialize a úklidové protějšky |
Životní cyklus testu |
| Vlákna |
STATestClass, STATestMethodUITestMethod |
Řízení provádění |
| Paralelizace |
Parallelize, DoNotParallelize |
Řízení provádění |
| Časový limit/Opakování |
Timeout, Retry |
Řízení provádění |
| Podmíněný |
Ignore, OSConditionCICondition |
Řízení provádění |
| Metadatové informace |
TestCategory, TestProperty, , OwnerPriority |
Testovací organizace |
| Sledování práce |
WorkItem, GitHubWorkItem |
Testovací organizace |
Kontrolní výrazy
Použijte Assert třídy z oboru názvů Microsoft.VisualStudio.TestTools.UnitTesting k ověření konkrétních funkcí. Testovací metoda provádí cvičení kódu v aplikaci, ale hlásí správnost pouze v případě, že zahrnete příkazy Assert.
Příkazy pro ověření MSTest jsou rozdělené na:
-
Asserttřída: Aserce pro obecné účely (AreEqual,IsTrue,ThrowsException) -
StringAsserttřída: Asserce specifické pro řetězce (Contains,Matches,StartsWith) -
CollectionAsserttřída: Kontrolní výrazy kolekce (Contains,AllItemsAreUnique,AreEquivalent)
Testování soukromých členů
Soukromé členy můžete otestovat pomocí reflexních wrapper tříd:
- PrivateObject: Pro privátní instanční metody
- PrivateType: Pro privátní statické metody
Návod
Zvažte, jestli soukromé metody potřebují přímé testování. Testování prostřednictvím veřejných rozhraní často poskytuje lepší pokrytí a udržovatelné testy.