Konfigurera MSTest

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 , , , som enskilda poster i Visual Studio och Visual Studio Code och .trx-loggen, ställ in det här värdet till true.
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>