Tesztek írása MSTesttel

Ebben a cikkben megismerheti az MSTest által a tesztek írásához és alakításához használt API-kat és konvenciókat.

Megjegyzés

Az "Attribútum" neveivel végződő attribútumok használhatják a rövid alakot. TestClass és TestClassAttribute egyenértékűek. A paraméter nélküli konstruktorokkal rendelkező attribútumok kihagyhatják a zárójeleket.

Tesztelési struktúra

Minden MSTest-tesztosztálynak rendelkeznie kell az TestClass attribútummal, és minden vizsgálati módszernek rendelkeznie kell az TestMethod attribútummal:

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

A TestClassAttribute teszteket és opcionálisan inicializálási vagy törlési metódusokat tartalmazó osztály megjelölése. Ezt az attribútumot kibővítheti a tesztosztály viselkedésének testreszabásához.

TestMethodAttribute

A TestMethodAttribute metódus egy futtatandó tesztként van megjelölve. A vizsgálati módszereknek a következőnek kell lenniük:

  • Példány metódusai (nem statikus)
  • Public
  • Visszatérés void, Task, vagy ValueTask (MSTest v3.3+)
  • Paraméter nélküli, kivéve, ha adatvezérelt attribútumokat használ
[TestClass]
public class TestMethodExamples
{
    [TestMethod]
    public void SynchronousTest()
    {
        Assert.IsTrue(true);
    }

    [TestMethod]
    public async Task AsynchronousTest()
    {
        await Task.Delay(100);
        Assert.IsTrue(true);
    }
}

Figyelmeztetés

Ne használjon async void tesztelési módszereket. Használja inkább a async Task vagy async ValueTask elemet.

DiscoverInternalsAttribute

A DiscoverInternalsAttribute szerelvény attribútum lehetővé teszi, hogy az MSTest felderítse internal a tesztosztályokat és metódusokat. Alapértelmezés szerint csak public tesztek lesznek felderítve. Ez az attribútum különösen akkor hasznos, ha olyan paraméteres tesztekkel rendelkezik, amelyek belső típusokat használnak paraméterekként:

[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);
    }
}

A DiscoverInternals nélkül a tesztmetódus és annak belső TestInput paramétertípusa nem lenne észlelve a tesztfuttató által.

Alapfogalmak

Az MSTest dokumentációja témakör szerint van rendszerezve:

Téma Description
Állítások Az elvárt eredmények ellenőrzése Assert osztályokkal
Adatvezérelt tesztelés Tesztek futtatása több bemenettel (DataRow, DynamicData)
Tesztelési életciklus Beállítás és törlés az összeállítás, az osztály és a teszt szintjén
Végrehajtási vezérlő Szálkezelés, párhuzamosítás, időtúllépések, újrapróbálkozások és feltételes végrehajtás
Szervezet tesztelése Kategóriák, prioritások, tulajdonosok és metaadatok
TestContext A teszt futtatókörnyezetének adatainak elérése

Attribútum – gyorsreferencia

Kategória Attribútumok Nézze
Tesztazonosítás \, \, \ Ez az oldal
Adatvezérelt \, \, \ Adatvezérelt tesztelés
Lifecycle AssemblyInitialize, ClassInitialize, TestInitializeés tisztítási megfelelők Tesztelési életciklus
Szálkezelés \, \, \ Végrehajtási vezérlő
Párhuzamosítás Parallelize, DoNotParallelize Végrehajtási vezérlő
Időtúllépés/újrapróbálkozás Timeout, Retry Végrehajtási vezérlő
Conditional \, \, \ Végrehajtási vezérlő
Metadaták TestCategory, TestProperty, OwnerPriority Szervezet tesztelése
Munkakövetés WorkItem, GitHubWorkItem Szervezet tesztelése

Állítások

A Microsoft.VisualStudio.TestTools.UnitTesting névtér Assert osztályai segítségével ellenőrizheti a konkrét funkcionalitást. Egy tesztmetódus kódot gyakorol az alkalmazásban, de csak akkor jelent helyességet, ha helyességi utasításokat tartalmaz.

Az MSTest-állítások a következőkre oszlanak:

Privát tagok tesztelése

A magántagokat a tükröződésburkoló osztályok használatával tesztelheti:

Jótanács

Fontolja meg, hogy a magánmetódusok közvetlen tesztelést igényelnek-e. A nyilvános felületeken végzett tesztelés gyakran jobb lefedettséget és karbantarthatóabb teszteket biztosít.

Lásd még