Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel erfahren Sie mehr über die APIs und Konventionen, die von MSTest verwendet werden, um Ihre Tests zu schreiben und zu gestalten.
Hinweis
Attributnamen, die mit "Attribut" enden, können das kurze Formular verwenden.
TestClass und TestClassAttribute sind gleichwertig. Attribute mit parameterlosen Konstruktoren können Klammern weglassen.
Teststruktur
Jede MSTest-Testklasse muss über das TestClass Attribut verfügen, und jede Testmethode muss über das TestMethod Attribut verfügen:
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class CalculatorTests
{
[TestMethod]
public void Add_TwoNumbers_ReturnsSum()
{
// Arrange
var calculator = new Calculator();
// Act
var result = calculator.Add(2, 3);
// Assert
Assert.AreEqual(5, result);
}
}
TestClassAttribute
Die TestClassAttribute kennzeichnet eine Klasse, die Tests enthält und optional Initialisierungs- oder Bereinigungsmethoden bereitstellt. Sie können dieses Attribut erweitern, um das Testklassenverhalten anzupassen.
TestMethodAttribute
Die TestMethodAttribute Methode wird als Test markiert, der ausgeführt werden soll. Testmethoden müssen folgendes sein:
- Instanzmethoden (nicht statisch)
- Öffentlichkeit
- Zurückgeben
void,TaskoderValueTask(MSTest v3.3+) - Parameterlos, sofern keine datengesteuerten Attribute verwendet werden
[TestClass]
public class TestMethodExamples
{
[TestMethod]
public void SynchronousTest()
{
Assert.IsTrue(true);
}
[TestMethod]
public async Task AsynchronousTest()
{
await Task.Delay(100);
Assert.IsTrue(true);
}
}
Warnung
Verwenden Sie async void nicht für Testmethoden. Verwenden Sie stattdessen async Task oder async ValueTask.
DiscoverInternalsAttribute
Mit dem DiscoverInternalsAttribute-Assemblierungsattribut kann MSTest, Testklassen internal und -methoden ermitteln. Standardmäßig werden nur public Tests entdeckt. Dieses Attribut ist besonders hilfreich, wenn Sie parametrisierte Tests haben, die interne Typen als Parameter verwenden:
[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();
var result = calculator.Add(input.Value, 1);
Assert.AreEqual(input.Value + 1, result);
}
}
Ohne DiscoverInternals, die Testmethode und der interne TestInput Parametertyp würden vom Testläufer nicht erkannt.
Kernkonzepte
DIE MSTest-Dokumentation ist nach Thema organisiert:
| Thema | Description |
|---|---|
| Assertionen | Überprüfen der erwarteten Ergebnisse mit Assert-Klassen |
| Datengesteuerte Tests | Ausführen von Tests mit mehreren Eingaben (DataRow, DynamicData) |
| Testlebenszyklus | Einrichten und Bereinigen auf Assembly-, Klassen- und Testebenen |
| Ausführungssteuerung | Threading, Parallelisierung, Timeouts, Wiederholungen und bedingte Ausführung |
| Testorganisation | Kategorien, Prioritäten, Besitzer und Metadaten |
| Testcontext | Access-Testlaufzeitinformationen |
Kurzübersicht zu Attributen
| Kategorie | Attribute | Siehe |
|---|---|---|
| Testidentifikation |
TestClass, TestMethodDiscoverInternals |
Diese Seite |
| Datengesteuert |
DataRow, DynamicDataTestDataRow |
Datengesteuerte Tests |
| Lebenszyklus |
AssemblyInitialize, ClassInitialize, TestInitializeund Bereinigen von Entsprechungen |
Testlebenszyklus |
| Einfädelnd |
STATestClass, STATestMethodUITestMethod |
Ausführungssteuerung |
| Parallelisierung |
Parallelize, DoNotParallelize |
Ausführungssteuerung |
| Timeout/Erneuter Versuch |
Timeout, Retry |
Ausführungssteuerung |
| Bedingt |
Ignore, OSConditionCICondition |
Ausführungssteuerung |
| Metadaten |
TestCategory
TestProperty
Owner
Priority
|
Testorganisation |
| Arbeitsüberwachung |
WorkItem, GitHubWorkItem |
Testorganisation |
Assertionen
Verwenden Sie die Assert-Klassen des Microsoft.VisualStudio.TestTools.UnitTesting-Namespace, um bestimmte Funktionen zu überprüfen. Eine Testmethode führt Code in Ihrer Anwendung aus, meldet jedoch die Korrektheit nur, wenn Sie Assert-Anweisungen einschließen.
MSTest-Assertionen sind unterteilt in:
-
AssertKlasse: Allgemeine Assertionen (AreEqual,IsTrue,ThrowsException) -
StringAssertKlasse: Zeichenfolgenspezifische Assertionen (Contains,Matches,StartsWith) -
CollectionAssertClass: Collection assertions (Contains,AllItemsAreUnique,AreEquivalent)
Testen privater Member
Sie können private Member mit Reflection-Wrapperklassen testen:
- PrivateObject: Für private Instanzmethoden
- PrivateType: Für private statische Methoden
Tipp
Überlegen Sie, ob private Methoden direkte Tests benötigen. Häufig bieten Tests über öffentliche Schnittstellen eine bessere Abdeckung und wartbarere Tests.