Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
I den här artikeln får du lära dig mer om API:er och konventioner som används av MSTest för att hjälpa dig att skriva och forma dina tester.
Kommentar
Attributnamn som slutar med "Attribut" kan använda det korta formuläret.
TestClass och TestClassAttribute är likvärdiga. Attribut med parameterlösa konstruktorer kan utelämna parenteser.
Teststruktur
Varje MSTest-testklass måste ha TestClass attributet och varje testmetod måste ha attributet TestMethod :
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
TestClassAttribute markerar en klass som innehåller test och, om du vill, initialiserings- eller städmetoder. Du kan utöka det här attributet för att anpassa beteendet för testklassen.
TestMethodAttribute
Markerar TestMethodAttribute en metod som ett test som ska köras. Testmetoderna måste vara:
- Instansmetoder (inte statiska)
- Public
- Returnera
void,TaskellerValueTask(MSTest v3.3+) - Parameterlös, såvida du inte använder datadrivna attribut
[TestClass]
public class TestMethodExamples
{
[TestMethod]
public void SynchronousTest()
{
Assert.IsTrue(true);
}
[TestMethod]
public async Task AsynchronousTest()
{
await Task.Delay(100);
Assert.IsTrue(true);
}
}
Varning
Använd inte async void för testmetoder. Använd async Task eller async ValueTask i stället.
DiscoverInternalsAttribute
Sammansättningsattributet DiscoverInternalsAttribute gör det möjligt för MSTest att identifiera internal testklasser och metoder. Som standard identifieras endast public tester. Det här attributet är särskilt användbart när du har parametriserade tester som använder interna typer som parametrar:
[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);
}
}
Utan DiscoverInternalsskulle testmetoden och dess interna TestInput parametertyp inte identifieras av testlöparen.
Huvudkoncept
MSTest-dokumentationen ordnas efter ämne:
| Ämne | Description |
|---|---|
| Påståenden | Verifiera förväntade resultat med Assert-klasser |
| Data-driven testning | Köra tester med flera indata (DataRow, DynamicData) |
| Testlivscykel | Konfigurera och rensa på sammansättnings-, klass- och testnivåer |
| Exekveringskontroll | Trådning, parallellisering, tidsgränser, återförsök och villkorlig exekvering |
| Testorganisation | Kategorier, prioriteringar, ägare och metadata |
| TestContext | Åtkomst till testkörningsinformation |
Snabbreferens för attribut
| Kategori | Attribut | Se |
|---|---|---|
| Testidentifiering |
TestClass, TestMethodDiscoverInternals |
Den här sidan |
| Data-driven |
DataRow, DynamicDataTestDataRow |
Data-drivna testning |
| Lifecycle |
AssemblyInitialize, ClassInitialize, TestInitializeoch rensningsmotsvarigheter |
Testlivscykel |
| Trådning |
STATestClass, STATestMethodUITestMethod |
Körningskontroll |
| Parallellisering |
Parallelize, DoNotParallelize |
Körningskontroll |
| Tidsgräns/försök igen |
Timeout, Retry |
Körningskontroll |
| Villkorlig |
Ignore, OSConditionCICondition |
Körningskontroll |
| Metainformation |
TestCategory, TestProperty, , OwnerPriority |
Testorganisation |
| Arbetsspårning |
WorkItem, GitHubWorkItem |
Testorganisation |
Påståenden
Använd Assert-klasserna i Microsoft.VisualStudio.TestTools.UnitTesting namnområdet för att verifiera specifika funktioner. En testmetod använder kod i ditt program, men den rapporterar endast korrekthet när du inkluderar Assert-instruktioner.
MSTest-påståenden är indelade i:
-
Assertklass: Allmänna uttryck (AreEqual,IsTrue,ThrowsException) -
StringAssertklass: Strängspecifika försäkran (Contains,Matches,StartsWith) -
CollectionAssertclass: Samlingspåståenden (Contains,AllItemsAreUnique,AreEquivalent)
Testa privata medlemmar
Du kan testa privata medlemmar med hjälp av reflektionshanteringsklasser:
- PrivateObject: För privata instansmetoder
- PrivateType: För privata statiska metoder
Tips/Råd
Överväg om privata metoder behöver direkt testning. Ofta ger testning via offentliga gränssnitt bättre täckning och mer underhållsbara tester.