Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
MSTest, Microsoft Testing Framework, är ett testramverk för .NET-program. Det gör att du kan skriva och köra tester och tillhandahålla testpaket med integrering till Visual Studio och Visual Studio Code Test Explorers, .NET CLI och många CI-pipelines.
MSTest är ett fullständigt stöd, öppen källkod och ett plattformsoberoende testramverk som fungerar med alla .NET-mål som stöds (.NET Framework, .NET Core, .NET, UWP, WinUI och så vidare) som finns på GitHub.
Körinställningar
En .runsettings-fil kan användas för att konfigurera hur enhetstester körs. Om du vill veta mer om körinställningar och konfigurationer som är relaterade till plattformen kan du läsa dokumentationen om VSTest-körinställningar eller dokumentationen om MSTest runner körinställningar.
MSTest-element
Med följande runsettings-poster kan du konfigurera hur MSTest fungerar.
| Konfiguration | Standardvärde | Värden |
|---|---|---|
AssemblyCleanupTimeout |
Ingen | Ange globalt den tidsgräns som ska tillämpas på varje instans av metoden för rensning av sammansättning.
[Timeout] attributet som anges på rensningsmetoden för sammansättning åsidosätter den globala tidsgränsen. |
AssemblyInitializeTimeout |
Ingen | Ange globalt den tidsgräns som ska tillämpas på varje instans av Assembly Initialize-metoden.
[Timeout] attributet som anges i metoden för att initiera sammansättningen åsidosätter den globala tidsgränsen. |
AssemblyResolution |
falskt | Du kan ange sökvägar till extra sammansättningar när du söker efter och kör enhetstester. Använd till exempel dessa sökvägar för beroendesammansättningar som inte finns i samma katalog som testsammansättningen. Om du vill ange en sökväg använder du ett katalogsökvägselement . Sökvägar kan innehålla miljövariabler.<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution>Den här funktionen tillämpas endast när du använder ett .NET Framework-mål. |
CaptureTraceOutput |
Result |
Samla in text från API:erna Console.Write*, Trace.Write*och Debug.Write* och associera den med det aktuella testet. Från och med MSTest 4.4 använder du None, Resulteller Live.
Live ekar Consoleockså , Traceoch TestContext.Write* utdata till konsolen medan testet körs. De tidigare booleska värdena stöds fortfarande: true mappar till Resultoch false mappar till None. |
ClassCleanupLifecycle |
Slut på lektion | Om du vill att klassrensningen ska ske i slutet av sammansättningen anger du den till EndOfAssembly. (Stöds inte längre från och med MSTest v4 eftersom EndOfClass är standard och det enda ClassCleanup-beteendet) |
ClassCleanupTimeout |
Ingen | Ange den tidsgräns som ska tillämpas globalt på varje instans av klassrensningsmetoden.
[Timeout] attributet som anges på metoden för klassrensning åsidosätter den globala tidsgränsen. |
ClassInitializeTimeout |
Ingen | Ange den tidsgräns som ska tillämpas globalt på varje instans av metoden för klassinitiering.
[Timeout] attributet som anges på metoden för klassinitiering åsidosätter den globala tidsgränsen. |
ConsiderFixturesAsSpecialTests |
falskt | Om du vill visa |
DeleteDeploymentDirectoryAfterTestRunIsComplete |
sann | Om du vill behålla distributionskatalogen efter en testkörning anger du värdet till false. |
DeploymentEnabled |
sann | Om du anger värdet till false kopieras inte distributionsobjekt som du anger i testmetoden till distributionskatalogen. |
DeployTestSourceDependencies |
sann | Ett värde som anger om testkällans referenser ska distribueras. |
EnableBaseClassTestMethodsFromOtherAssemblies |
sann | Ett värde som anger om du vill aktivera identifiering av testmetoder från basklasser i en annan sammansättning än den ärvande testklassen. |
ForcedLegacyMode |
falskt | I äldre versioner av Visual Studio optimerades MSTest-adaptern för att göra den snabbare och mer skalbar. Vissa beteenden, till exempel i vilken ordning testerna körs, kanske inte är exakt som i tidigare utgåvor av Visual Studio. Ange värdet till true för att använda det äldre testkortet. Du kan till exempel använda den här inställningen om du har en app.config-fil angiven för ett enhetstest. Vi rekommenderar att du överväger att omstrukturera dina tester så att du kan använda det nyare adaptern. |
GlobalTestCleanupTimeout |
TestCleanupTimeout |
Från och med MSTest 4.4 anger du tidsgränsen för varje global testrensningsmetod. När du utelämnar den här posten använder TestCleanupTimeoutMSTest . Ett [Timeout] attribut på metoden åsidosätter båda värdena. |
GlobalTestInitializeTimeout |
TestInitializeTimeout |
Från och med MSTest 4.4 anger du tidsgränsen för varje global testinitieringsmetod. När du utelämnar den här posten använder TestInitializeTimeoutMSTest . Ett [Timeout] attribut på metoden åsidosätter båda värdena. |
LaunchDebuggerOnTestFailure |
falskt | Från och med MSTest 4.2 startar MSTest felsökaren när ett test misslyckas, om det är inställt på true. |
MapInconclusiveToFailed |
falskt | Om ett test slutförs med en oklar status mappas det till den överhoppade statusen i Test Explorer. Om du vill att ofullständiga tester ska visas som misslyckade anger du värdet till sant. |
MapNotRunnableToFailed |
sann | Ett värde som anger om ett resultat som inte kan köras mappas till ett misslyckat test. |
OrderTestsByNameInClass |
falskt | Om du vill köra tester med testnamn både i TestUtforskaren och på kommandoraden anger du värdet till sant. |
Parallelize |
Används för att ange parallelliseringsinställningarna:Workers: Antalet trådar/arbetare som ska användas för parallellisering, vilket som standard är antalet processorer på den aktuella datorn.Scope: Parallelliseringens omfattning. Du kan ställa in den på MethodLevel. Som standard är det ClassLevel.<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize> |
|
RandomizeTestOrder |
falskt | Från och med MSTest 4.3 anger du det här värdet till sant för att köra tester i slumpmässig ordning, vilket hjälper till att visa dolda ordningsberoenden mellan tester. Den här inställningen kan inte kombineras med OrderTestsByNameInClass. |
RandomTestOrderSeed |
Från och med MSTest 4.3, när RandomizeTestOrder är true, anger du ett heltalsfrö så att den slumpmässiga ordningen kan reproduceras mellan körningar. När det tas bort används ett nytt frö för varje körning. |
|
SettingsFile |
Du kan ange en testinställningsfil som ska användas med MSTest-adaptern här. Du kan också ange en testinställningsfil från inställningsmenyn. Om du anger det här värdet måste du också ange värdet ForcedLegacyModetrue.<ForcedLegacyMode>true</ForcedLegacyMode> |
|
TestCleanupTimeout |
Ingen | Ange den tidsgräns som ska tillämpas globalt på varje instans av testrensningsmetoden.
[Timeout] attributet som anges på metoden för testrensning åsidosätter den globala tidsgränsen. |
TestInitializeTimeout |
Ingen | Ange den tidsgräns som ska tillämpas globalt för varje instans av testinitieringsmetoden.
[Timeout] attributet som anges på testinitieringsmetoden åsidosätter den globala tidsgränsen. |
TestTimeout |
Ingen | Hämtar den specificerade tidsgränsen för globala testfall. |
TreatClassAndAssemblyCleanupWarningsAsErrors |
falskt | Om du vill se dina misstag vid klassrensningar som felaktigheter anger du värdet till true. |
TreatDiscoveryWarningsAsErrors |
falskt | Om du vill rapportera testvarningar som fel, ställ in det här värdet till sant. |
Tidsgränsvärden måste vara positiva heltal i millisekunder. Om du vill köra utan tidsgräns utelämnar du posten i stället för att ställa in den på 0. Globala tidsgränser för testfixtur ärver motsvarande TestInitializeTimeout eller TestCleanupTimeout värde.
TestRunParameter komponent
<TestRunParameters>
<Parameter name="webAppUrl" value="http://localhost" />
</TestRunParameters>
Testkörningsparametrar är ett sätt att definiera variabler och värden som är tillgängliga för testerna vid körning. Få åtkomst till parametrarna med egenskapen MSTest TestContext.Properties :
private string _appUrl;
public TestContext TestContext { get; set; }
[TestMethod]
public void HomePageTest()
{
string _appUrl = TestContext.Properties["webAppUrl"];
}
Om du vill använda testkörningsparametrar lägger du till en offentlig TestContext egenskap i testklassen.
Exempel på .runsettings-fil
Följande XML visar innehållet i en typisk .runsettings-fil . Kopiera den här koden och redigera den så att den passar dina behov.
Varje element i filen är valfritt eftersom det har ett standardvärde.
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!-- Parameters used by tests at runtime -->
<TestRunParameters>
<Parameter name="webAppUrl" value="http://localhost" />
<Parameter name="webAppUserName" value="Admin" />
<Parameter name="webAppPassword" value="Password" />
</TestRunParameters>
<!-- MSTest -->
<MSTest>
<MapInconclusiveToFailed>True</MapInconclusiveToFailed>
<CaptureTraceOutput>false</CaptureTraceOutput>
<DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
<DeploymentEnabled>False</DeploymentEnabled>
<ConsiderFixturesAsSpecialTests>False</ConsiderFixturesAsSpecialTests>
<AssemblyResolution>
<Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
</AssemblyResolution>
</MSTest>
</RunSettings>
testconfig.json
När du kör testerna med MSTest kan du använda en testconfig.json-fil för att konfigurera testkörarnas beteende. Den testconfig.json filen är en JSON-fil som innehåller konfigurationsinställningarna för testlöparen. Filen används för att konfigurera testlöparen och testkörningsmiljön. Mer information finns i MTP-testconfig.json dokumentation.
Från och med MSTest 3.7 kan du även konfigurera MSTest-körningar i samma konfigurationsfil. I följande avsnitt beskrivs de inställningar som du kan använda i filen testconfig.json.
Från och med MSTest 4.3.3 accepterar .NET Framework även kommentarer och avslutande kommatecken i testconfig.json.
MSTest-element
MSTest-inställningarna grupperas efter funktioner som beskrivs i de avsnitt som följer.
| Inträde | Standardvärde | Beskrivning |
|---|---|---|
| enableBaseClassTestMethodsFromOtherAssemblies (Aktivera testmetoder från basklass i andra sammansättningar) | sann | Ett värde som anger om du vill aktivera identifiering av testmetoder från basklasser i en annan sammansättning än den ärvande testklassen. |
| classCleanupLifecycle | EndOfAssembly | Om du vill att klassrensningen ska ske i slutet av klassen anger du den till EndOfClass-. |
assemblyResolution -inställningar
Alla inställningar i det här avsnittet tillhör elementet assemblyResolution.
| Inträde | Standardvärde | Beskrivning |
|---|---|---|
| Sökvägar | Ingen | Du kan ange sökvägar till extra sammansättningar när du söker efter och kör enhetstester. Använd till exempel dessa sökvägar för beroendesammansättningar som inte finns i samma katalog som testsammansättningen. Du kan ange en sökväg i formen { "path": "...", "includeSubDirectories": "true/false" }. |
Exempel:
{
"mstest": {
"assemblyResolution": {
{ "path": "...", "includeSubDirectories": "true/false" }
}
}
}
deployment -inställningar
Alla inställningar i det här avsnittet tillhör elementet deployment.
| Inträde | Standardvärde | Beskrivning |
|---|---|---|
| taBortDistributionsKatalogEfterTestkörningensSlutförande | sann | Om du vill behålla distributionskatalogen efter en testkörning anger du värdet till false. |
| deployTestSourceDependencies | sann | Anger om referenserna för testkällan ska distribueras. |
| Aktiverad | sann | Om du anger värdet till false kopieras inte distributionsobjekt som du anger i testmetoden till distributionskatalogen. |
Exempel:
{
"mstest": {
"deployment": {
"deleteDeploymentDirectoryAfterTestRunIsComplete": true,
"deployTestSourceDependencies": true,
"enabled": true
}
}
}
output -inställningar
Alla inställningar i det här avsnittet tillhör elementet output.
| Inträde | Standardvärde | Beskrivning |
|---|---|---|
| captureTrace | Result |
Avbilda Console, Traceoch Debug mata ut och associera det med det aktuella testet. Från och med MSTest 4.4 använder du None, Resulteller Live.
Live ekar också utdata, inklusive TestContext.Write* meddelanden, medan testet körs. De booleska värdena stöds fortfarande: true mappar till Resultoch false mappar till None. |
Exempel:
{
"mstest": {
"output": {
"captureTrace": false
}
}
}
parallelism -inställningar
Alla inställningar i det här avsnittet tillhör elementet parallelism.
| Inträde | Standardvärde | Beskrivning |
|---|---|---|
| Aktiverad | falskt | Aktivera testparallellisering. |
| omfattning | klass | Parallelliseringens omfattning. Du kan ställa in den på method. Standardvärdet, class, motsvarar att köra alla tester av en viss klass sekventiellt men flera klasser parallellt. |
| arbetare | 0 | Antalet trådar/arbetare som ska användas för parallellisering. Standardvärdet mappar till antalet processorer på den aktuella datorn. |
Exempel:
{
"mstest": {
"parallelism": {
"enabled": true,
"scope": "method",
"workers": 32
}
}
}
execution -inställningar
Alla inställningar i det här avsnittet tillhör elementet execution.
| Inträde | Standardvärde | Beskrivning |
|---|---|---|
| Betrakta Tom Datakälla Som Inkonklusiv | falskt | När den är inställd på truebetraktas en tom datakälla som ofullständig. |
| Betrakta testuppställningar som speciella tester | falskt | Om du vill visa AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup som enskilda poster i Visual Studio och Visual Studio Code Test Explorer och .trx loggen ska du ange värdet som sant. |
| beroenden | Från och med MSTest 4.4 deklarerar du testberoende chains och nodes. Den här inställningen är endast tillgänglig med Microsoft. Testing.Platform. Mer information finns i Testa beroenden. |
|
| mappaOavgjortSomMisslyckat | falskt | Om ett test slutförs med en oklar status mappas det till den överhoppade statusen i Test Explorer. Om du vill att ofullständiga tester ska visas som misslyckade anger du värdet till sant. |
| launchDebuggerOnTestFailure | falskt | Från och med MSTest 4.2 startar MSTest felsökaren när ett test misslyckas, om true är inställt. |
| mapNotRunnableTillMisslyckad | sann | Ett värde som anger om ett resultat som inte kan köras mappas till ett misslyckat test. |
| sorteraTesterEfterNamnIKlass | falskt | Kör tester i alfabetisk ordning inom varje klass. Från och med MSTest 4.3 använder du mstest.execution.orderTestsByNameInClass. Den tidigare mstest.orderTestsByNameInClass nyckeln fungerar fortfarande men skapar en utfasningsvarning. |
| randomizeTestOrder | falskt | Från och med MSTest 4.3 anger du det här värdet till true att köra tester i slumpmässig ordning, vilket hjälper till att visa dolda ordningsberoenden mellan tester. Den här inställningen kan inte kombineras med orderTestsByNameInClass. |
| randomTestOrderSeed | Från och med MSTest 4.3, när randomizeTestOrder är true, anger du ett heltal som frö för att den slumpmässiga ordningen ska kunna återskapas mellan körningar. När det tas bort används ett nytt frö för varje körning. |
|
| behandlaKlassOchAssembliesRensningsvarningarSomFel | falskt | Om du vill se dina misstag vid klassrensningar som felaktigheter anger du värdet till true. |
| behandlaUpptäckningsvarningarSomFel | falskt | Om du vill rapportera testvarningar som fel, ställ in det här värdet till sant. |
Exempel:
{
"mstest": {
"execution": {
"considerEmptyDataSourceAsInconclusive": false,
"considerFixturesAsSpecialTests": false,
"mapInconclusiveToFailed": true,
"mapNotRunnableToFailed": true,
"treatClassAndAssemblyCleanupWarningsAsErrors": false,
"treatDiscoveryWarningsAsErrors": false
}
}
}
timeout -inställningar
Alla inställningar i det här avsnittet tillhör elementet timeout.
| Inträde | Standardvärde | Beskrivning |
|---|---|---|
| monteringsrengöring | Ingen | Ange globalt den tidsgräns som ska tillämpas på varje instans av metoden för rensning av sammansättning. |
| assemblyInitialize | Ingen | Ange globalt den tidsgräns som ska tillämpas på varje instans av Assembly Initialize-metoden. |
| classCleanup | Ingen | Ange den tidsgräns som ska tillämpas globalt på varje instans av klassrensningsmetoden. |
| klassInitiera | Ingen | Ange den tidsgräns som ska tillämpas globalt på varje instans av metoden för klassinitiering. |
| globalTestCleanup | testCleanup |
Från och med MSTest 4.4 anger du tidsgränsen för varje global testrensningsmetod. När du utelämnar den här posten använder testCleanupMSTest . |
| globalTestInitialize | testInitialize |
Från och med MSTest 4.4 anger du tidsgränsen för varje global testinitieringsmetod. När du utelämnar den här posten använder testInitializeMSTest . |
| test | Ingen | Ange tidsgränsen för testet globalt. |
| testCleanup | Ingen | Ange den tidsgräns som ska tillämpas globalt på varje instans av testrensningsmetoden. |
| testInitialize | Ingen | Ange den tidsgräns som ska tillämpas globalt för varje instans av testinitieringsmetoden. |
| AnvändSamarbetsAvbokning | falskt | När värdet är inställt på true, vid timeout, kommer MSTest endast att utlösa annullering av CancellationToken, men slutar inte att övervaka metoden. Det här beteendet är mer effektivt men förlitar sig på att användaren överför token korrekt genom alla vägar. |
Anmärkning
Tidsgränsvärden måste vara positiva heltal i millisekunder. Om du vill köra utan tidsgräns utelämnar du posten i stället för att ställa in den på 0. Globala tidsgränser för testfixtur ärver motsvarande testInitialize eller testCleanup värde, så utelämna båda posterna när du inte vill ha en timeout på en global fixtur. Ett [Timeout] attribut på en metod åsidosätter den konfigurerade tidsgränsen.
Exempel:
{
"mstest": {
"timeout": { "globalTestInitialize": 30000, "globalTestCleanup": 30000 }
}
}
Exempel på testconfig.json fil
Följande JSON visar innehållet i en typisk .testconfig.json fil. Kopiera den här koden och redigera den så att den passar dina behov.
Varje element i filen är valfritt eftersom det har ett standardvärde.
{
"platformOptions": {
"resultDirectory": "./TestResults"
},
"mstest": {
"execution": {
"mapInconclusiveToFailed": true,
"disableAppDomain": true,
"considerFixturesAsSpecialTests": false
},
"parallelism": {
"enabled": true,
"scope": "method"
},
"output": {
"captureTrace": false
}
}
}
MSBuild-egenskaper
Från och med MSTest 4.3 kan du välja parallellisering på sammansättningsnivå från projektfilen eller Directory.Build.props utan att skapa ett [assembly: Parallelize] attribut. Dessa egenskaper genererar motsvarande sammansättningsattribut under bygget, så de måste GenerateAssemblyInfo vara true (standardvärdet för SDK-liknande projekt).
| Property | Standardvärde | Beskrivning |
|---|---|---|
MSTestParallelizeScope |
Parallelliseringsomfånget. Ange MethodLevel eller ClassLevel för att generera [assembly: Parallelize(Scope = ExecutionScope.MethodLevel)] (eller ExecutionScope.ClassLevel), eller None för att generera [assembly: DoNotParallelize]. |
|
MSTestParallelizeWorkers |
Det maximala antalet arbetstrådar, angivet som värdet Workers för [assembly: Parallelize]. Ett värde för 0 mappar till antalet processorer på den aktuella datorn. Det går inte att ange den här egenskapen när MSTestParallelizeScope är None. |
MSTest validerar båda egenskaperna under bygget. Ogiltiga omfångsvärden, antal icke-heltalsarbetare och ett antal arbetare i kombination med ett None omfång misslyckas. Deklarera [assembly: Parallelize] inte heller eller [assembly: DoNotParallelize] i källan eftersom det genererade attributet duplicerar det. När GenerateAssemblyInfo är falsedeklarerar du attributet i källan i stället.
I följande exempel möjliggörs parallellisering på metodnivå med fyra arbetare för varje testprojekt som importerar Directory.Build.props filen:
<Project>
<PropertyGroup>
<MSTestParallelizeScope>MethodLevel</MSTestParallelizeScope>
<MSTestParallelizeWorkers>4</MSTestParallelizeWorkers>
</PropertyGroup>
</Project>