Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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, vagyValueTask(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:
-
Assertosztály: Általános célú állítások (AreEqual,IsTrue,ThrowsException) -
StringAssertosztály: Sztringspecifikus állítások (Contains,Matches,StartsWith) -
CollectionAssertosztály: Gyűjteményre vonatkozó állítások (Contains,AllItemsAreUnique,AreEquivalent)
Privát tagok tesztelése
A magántagokat a tükröződésburkoló osztályok használatával tesztelheti:
- PrivateObject: Privát példánymetódusok esetén
- PrivateType: Privát statikus metódusokhoz
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.