Dela via


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 0 Ange globalt den tidsgräns som ska tillämpas på varje instans av metoden för rensning av sammansättning. [Timeout] attribut som specificeras i assemblys städmetod åsidosätter den globala tidsgränsen.
AssemblyInitializeTimeout 0 Ange globalt den tidsgräns som ska tillämpas på varje instans av Assembly Initialize-metoden. [Timeout] attributet som anges i initialiseringsmetoden för 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 true Samla in textmeddelanden som kommer från API:erna Console.Write*, Trace.Write*och Debug.Write* som kommer att associeras med det aktuella testet som körs.
ClassCleanupLifecycle EndOfClass Om du vill att klassrensningen ska ske i slutet av sammansättningen anger du den till EndOfAssembly. (Stöds inte längre från MSTest v4 eftersom EndOfClass är standard och endast ClassCleanup-beteende )
ClassCleanupTimeout 0 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 0 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.
Ta bort distributionskatalogen när testrundan är klar sann Om du vill behålla distributionskatalogen efter en testkörning anger du värdet till false.
DistribueringAktiverad true Om du anger värdet till false kopieras inte distributionsobjekt som du anger i testmetoden till distributionskatalogen.
DeployTestSourceDependencies true Ett värde som anger om testkällans referenser ska distribueras.
AktiveraTestmetoderFrånBasKlasserFrånAndraAssemblies true 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.
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.
KopplaEjKörbarTillMisslyckad true 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.
Parallellisera Används för att ange parallelliseringsinställningarna:

Arbetare: Antalet trådar/arbetare som ska användas för parallellisering, vilket som standard är antalet processorer på den aktuella datorn.

OMFÅNG: Parallelliseringens omfattning. Du kan ange den till MethodLevel. Som standard är det ClassLevel.

<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize>
Inställningsfil 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 ForcedLegacyMode till true.

<ForcedLegacyMode>true</ForcedLegacyMode>
TestCleanupTimeout 0 Ange den tidsgräns som ska tillämpas globalt på varje instans av testrensningsmetoden. [Timeout] attributet som anges på testrensningsmetoden åsidosätter den globala tidsgränsen.
TestInitializeTimeout 0 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 0 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.
BehandlaUpptäckningsvarningarSomFel falskt Om du vill rapportera testvarningar som fel, ställ in det här värdet till sant.

TestRunParameter element

<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 under 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 run time -->
  <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 dokumentationen Microsoft.Testing.Platform testconfig.json.

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.

MSTest-element

MSTest-inställningarna grupperas efter funktioner som beskrivs i de avsnitt som följer.

Inträde Standardvärde Beskrivning
sorteraTesterEfterNamnIKlass falskt Om du vill köra tester med testnamn både i TestUtforskaren och på kommandoraden anger du värdet till sant.
enableBaseClassTestMethodsFromOtherAssemblies (Aktivera testmetoder från basklass i andra sammansättningar) true 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 true Om du vill behålla distributionskatalogen efter en testkörning anger du värdet till false.
deployTestSourceDependencies true Anger om referenserna för testkällan ska distribueras.
Aktiverad true 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 true Samla in textmeddelanden som kommer från API:erna Console.Write*, Trace.Write*och Debug.Write* som kommer att associeras med det aktuella testet som körs.

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.
mappaOavgjortSomMisslyckat falskt Om ett test slutförs med en otydlig status mappas det till hoppade över-statusen i Test Explorer. Om du vill att ofullständiga tester ska visas som misslyckade anger du värdet till sant.
mapNotRunnableTillMisslyckad true Ett värde som anger om ett resultat som inte kan köras mappas till ett misslyckat test.
behandlaKlassOchAssembliesRensningsvarningarSomFel falskt Om du vill betrakta dina misslyckanden i klassrensningar som fel, ställ in värdet till true.
behandlaUpptäckningsvarningarSomFel falskt Om du vill rapportera testidentifieringsvarningar som felaktiga, ställ in det här värdet till true.

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 0 Ange tidsgränsen som ska tillämpas globalt på varje instans av metoden för rensning av assembly.
assemblyInitialize 0 Ange globalt den tidsgräns som ska tillämpas på varje instans av metoden för att initiera montering.
classCleanup 0 Ange den tidsgräns som ska tillämpas globalt på varje instans av klassrensningsmetoden.
klassInitiera 0 Ange den tidsgräns som ska tillämpas globalt på varje instans av metoden för klassinitiering.
test 0 Ange tidsgränsen för testet globalt.
testCleanup 0 Ange den tidsgräns som ska tillämpas globalt på varje instans av testrensningsmetoden.
testInitialize 0 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.

Note

[Timeout]-attributet som anges på en metod överstyr den globala tidsgränsen. Till exempel åsidosätter [Timeout(1000)] på en metod som markerats med [AssemblyCleanup] den globala assemblyCleanup tidsgränsen.

Exempel:

{
  "mstest": {
    "timeout": {
        "assemblyCleanup": 0,
        "assemblyInitialize": 0,
        "classCleanup": 0,
        "classInitialize": 0,
        "test": 0,
        "testCleanup": 0,
        "testInitialize": 0,
        "useCooperativeCancellation": false
    }
  }
}

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": {
  },
  "mstest": {
    "execution": {
        "mapInconclusiveToFailed" : true,
        "disableAppDomain": true,
        "considerFixturesAsSpecialTests" : false,
    },
    "parallelism" : {
        "enabled": true,
        "scope": "method",
    },
    "output": {
        "captureTrace": false
    }
  }
}