Psaní testů pomocí MSTestu

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, Task nebo ValueTask (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:

Testování soukromých členů

Soukromé členy můžete otestovat pomocí reflexních wrapper tříd:

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.

Viz také