Delen via


MSTest configureren

MSTest, Microsoft Testing Framework, is een testframework voor .NET-toepassingen. Hiermee kunt u tests schrijven en uitvoeren en testsuites bieden met integratie met Visual Studio en Visual Studio Code Test Explorers, de .NET CLI en veel CI-pijplijnen.

MSTest is een volledig ondersteund opensource- en een platformoverschrijdend testframework dat werkt met alle ondersteunde .NET-doelen (.NET Framework, .NET Core, .NET, .NET, UWP, WinUI, enzovoort) die worden gehost op GitHub.

Runsettings

Een .runsettings-bestand kan worden gebruikt om te configureren hoe eenheidstests worden uitgevoerd. Voor meer informatie over de runsettings en de configuraties die betrekking hebben op het platform, kunt u de documentatie van VSTest runsettings of MSTest runner runsettings raadplegen.

MSTest-element

Met de volgende runettings-vermeldingen kunt u configureren hoe MSTest zich gedraagt.

Configuratie Standaardinstelling Waarden
AssemblyCleanupTimeout 0 Geef globaal de time-out op die moet worden toegepast op elk exemplaar van de assembly-opschoonmethode. [Timeout] kenmerk dat is opgegeven voor de assembly-opschoonmethode overschrijft de globale time-out.
AssemblyInitializeTimeout 0 Geef globaal de time-out op die moet worden toegepast op elk exemplaar van de assembly-initialisatiemethode. [Timeout] kenmerk dat is opgegeven voor de assembly initialize methode overschrijft de globale time-out.
AssemblyResolution false U kunt paden naar extra assembly's opgeven bij het zoeken en uitvoeren van eenheidstests. Gebruik deze paden bijvoorbeeld voor afhankelijkheidsassembly's die zich niet in dezelfde map bevinden als de testassembly. Als u een pad wilt opgeven, gebruikt u een mappadelement . Paden kunnen omgevingsvariabelen bevatten.

<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution>

Deze functie wordt alleen toegepast wanneer u een .NET Framework-doel gebruikt.
CaptureTraceOutput true Leg sms-berichten vast die afkomstig zijn van de Console.Write*, Trace.Write*en Debug.Write* API's die worden gekoppeld aan de huidige actieve test.
ClassCleanupLifecycle EndOfClass Als u wilt dat de klasse wordt opgeschoond aan het einde van de assembly, stelt u deze in op EndOfAssembly. (Niet meer ondersteund vanaf MSTest v4 omdat EndOfClass de standaardinstelling is en alleen ClassCleanup-gedrag )
ClassCleanupTimeout 0 Geef globaal de time-out op die moet worden toegepast op elk exemplaar van de klasse-opschoonmethode. [Timeout] kenmerk dat is opgegeven in de klasse opschoonmethode overschrijft de globale time-out.
ClassInitializeTimeout 0 Geef globaal de time-out op die moet worden toegepast op elk exemplaar van de klasse-initialisatiemethode. [Timeout] kenmerk dat is opgegeven voor de methode class initialize overschrijft de globale time-out.
ConsiderFixturesAsSpecialTests false Als u afzonderlijke vermeldingen in Visual Studio en Visual Studio Code en .trx-logboek wilt weergeven AssemblyInitializeAssemblyCleanupClassInitializeClassCleanup, stelt u deze waarde Test Explorer
DeleteDeploymentDirectoryAfterTestRunIsComplete true Als u de implementatiemap wilt behouden na een testuitvoering, stelt u deze waarde in op false.
DeploymentEnabled true Als u de waarde instelt op onwaar, worden implementatie-items die u in uw testmethode opgeeft, niet gekopieerd naar de implementatiemap.
DeployTestSourceDependencies true Een waarde die aangeeft of de bronverwijzingen voor de test moeten worden geïmplementeerd.
EnableBaseClassTestMethodsFromOtherAssemblies true Een waarde die aangeeft of detectie van testmethoden uit basisklassen in een andere assembly moet worden ingeschakeld dan de overnemende testklasse.
ForcedLegacyMode false In oudere versies van Visual Studio is de MSTest-adapter geoptimaliseerd om deze sneller en beter schaalbaar te maken. Sommige gedragingen, zoals de volgorde waarin tests worden uitgevoerd, zijn mogelijk niet precies zoals in eerdere edities van Visual Studio. Stel de waarde in op true om de oudere testadapter te gebruiken.

U kunt deze instelling bijvoorbeeld gebruiken als u een app.config-bestand hebt opgegeven voor een eenheidstest.

U wordt aangeraden uw tests te herstructureren zodat u de nieuwere adapter kunt gebruiken.
MapInconclusiveToFailed false Als een test is voltooid met een niet-overtuigende status, wordt deze toegewezen aan de overgeslagen status in Test Explorer. Als u wilt dat niet-overtuigende tests worden weergegeven als mislukt, stelt u de waarde in op true.
MapNotRunnableToFailed true Een waarde die aangeeft of een niet-uitgevoerd resultaat is toegewezen aan een mislukte test.
OrderTestsByNameInClass false Als u tests wilt uitvoeren op basis van testnamen, zowel in Test Explorers als via de opdrachtregel, stelt u deze waarde in op true.
Parallelliseren Wordt gebruikt om de instellingen voor parallelle uitvoering in te stellen:

Werkrollen: het aantal threads/werkrollen dat moet worden gebruikt voor parallelle uitvoering, wat standaard het aantal processors op de huidige computer is.

BEREIK: Het bereik van parallelle uitvoering. U kunt deze instellen op MethodLevel. Het is standaard ClassLevel.

<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize>
SettingsFile U kunt hier een testinstellingenbestand opgeven dat moet worden gebruikt met de MSTest-adapter. U kunt ook een testinstellingenbestand opgeven in het instellingenmenu.

Als u deze waarde opgeeft, moet u de ForcedLegacyMode ook instellen op true.

<ForcedLegacyMode>true</ForcedLegacyMode>
TestCleanupTimeout 0 Geef globaal de time-out op die moet worden toegepast op elk exemplaar van testopschoonmethode. [Timeout] kenmerk dat is opgegeven voor de testopschoonmethode overschrijft de globale time-out.
TestInitializeTimeout 0 Geef globaal de time-out op die moet worden toegepast op elk exemplaar van de test-initialisatiemethode. [Timeout] kenmerk dat is opgegeven voor de test initialize-methode overschrijft de globale time-out.
TestTimeout 0 Hiermee wordt de opgegeven time-out voor globale testcases opgetreden.
TreatClassAndAssemblyCleanupWarningsAsErrors false Als u uw fouten in klasseopruimingen als fouten wilt zien, stelt u deze waarde in op waar.
TreatDiscoveryWarningsAsErrors false Als u detectiewaarschuwingen als fouten wilt rapporteren, stelt u deze waarde in op waar.

TestRunParameter element

<TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
</TestRunParameters>

Testuitvoeringsparameters bieden een manier om variabelen en waarden te definiëren die tijdens runtime beschikbaar zijn voor de tests. Open de parameters met behulp van de eigenschap MSTest TestContext.Properties :

private string _appUrl;
public TestContext TestContext { get; set; }

[TestMethod]
public void HomePageTest()
{
    string _appUrl = TestContext.Properties["webAppUrl"];
}

Als u testuitvoeringsparameters wilt gebruiken, voegt u een openbare TestContext eigenschap toe aan uw testklasse.

Voorbeeld van .runsettings-bestand

In de volgende XML ziet u de inhoud van een typisch RUNETTINGS-bestand . Kopieer deze code en bewerk deze naar wens.

Elk element van het bestand is optioneel omdat het een standaardwaarde heeft.

<?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

Wanneer u uw tests uitvoert met MSTest, kunt u een testconfig.json-bestand gebruiken om het gedrag van de testrunner te configureren. Het testconfig.json-bestand is een JSON-bestand dat de configuratie-instellingen voor de testrunner bevat. Het bestand wordt gebruikt om de testrunner en de testuitvoeringsomgeving te configureren. Raadpleeg documentatie van Microsoft.Testing.Platform testconfig.jsonvoor meer informatie.

Vanaf MSTest 3.7 kunt u MSTest-uitvoeringen ook configureren in hetzelfde configuratiebestand. In de volgende secties worden de instellingen beschreven die u in het bestand testconfig.json kunt gebruiken.

MSTest-element

MSTest-instellingen worden gegroepeerd op functionaliteit die wordt beschreven in de volgende secties.

Ingang Standaardinstelling Beschrijving
orderTestsByNameInClass false Als u tests wilt uitvoeren op testnamen, zowel in de Test Explorers als op de opdrachtregel, stelt u deze waarde in op true.
schakelBasisKlasseTestMethodenVanAndereAssembliesIn true Een waarde die aangeeft of detectie van testmethoden uit basisklassen in een andere assembly moet worden ingeschakeld dan de overnemende testklasse.
klasseCleanupLifecycle EndOfAssembly Als u wilt dat de klasse wordt opgeschoond aan het einde van de klasse, stelt u deze in op EndOfClass-.

AssemblyResolution-instellingen

Ingang Standaardinstelling Beschrijving
Paden Geen U kunt paden naar extra assembly's opgeven bij het zoeken en uitvoeren van eenheidstests. Gebruik deze paden bijvoorbeeld voor afhankelijkheidsassembly's die zich niet in dezelfde map bevinden als de testassembly. U kunt een pad opgeven in de vorm { "path": "...", "includeSubDirectories": "true/false" }.

Implementatie-instellingen

Ingang Standaardinstelling Beschrijving
verwijderDeploymapNaVoltooiingTestuitvoering true Als u de implementatiemap wilt behouden na een testuitvoering, stelt u deze waarde in op false.
deployTestSourceDependencies true Geeft aan of de bronverwijzingen voor de test moeten worden geïmplementeerd.
Ingeschakeld true Als u de waarde instelt op onwaar, worden implementatie-items die u in uw testmethode opgeeft, niet gekopieerd naar de implementatiemap.

Uitvoerinstellingen

Ingang Standaardinstelling Beschrijving
captureTrace false Leg sms-berichten vast die afkomstig zijn van de Console.Write*, Trace.Write*en Debug.Write* API's die worden gekoppeld aan de huidige actieve test.

Instellingen voor parallelle uitvoering

Ingang Standaardinstelling Beschrijving
Ingeschakeld false Schakel testparallellisatie in.
reikwijdte klas Het bereik van parallelisatie. U kunt deze instellen op method. De standaardinstelling, class, komt overeen met het sequentieel uitvoeren van alle tests van een bepaalde klasse, maar meerdere klassen parallel.
arbeiders 0 Het aantal threads/werkrollen dat moet worden gebruikt voor parallelle uitvoering. De standaardwaarde wordt toegewezen aan het aantal processors op de huidige computer.

Uitvoeringsinstellingen

Ingang Standaardinstelling Beschrijving
beschouwLegeGegevensbronAlsNietDoorslaggevend false Als deze is ingesteld op true, wordt een lege gegevensbron beschouwd als niet-overtuigend.
beschouwFixturesAlsSpecialeTests false Als u AssemblyInitialize, AssemblyCleanup, ClassInitializewilt weergeven, ClassCleanup als afzonderlijke vermeldingen in Visual Studio en Visual Studio Code Test Explorer en .trx-logboek, stelt u deze waarde in op true.
InconclusiefNaarMisluktKoppelen false Als een test is voltooid met een niet-overtuigende status, wordt deze toegewezen aan de overgeslagen status in Test Explorer. Als u wilt dat niet-overtuigende tests worden weergegeven als mislukt, stelt u de waarde in op true.
mapNietUitvoerbaarNaarMislukt true Een waarde die aangeeft of een niet-uitgevoerd resultaat is toegewezen aan een mislukte test.
treatClassAndAssemblyCleanupWarningsAsErrors false Als u uw fouten in klasseopruimingen als fouten wilt zien, stelt u deze waarde in op waar.
waarschuwingenBijOntdekkingBehandelenAlsFouten false Als u detectiewaarschuwingen als fouten wilt rapporteren, stelt u deze waarde in op waar.

Time-outinstellingen

Ingang Standaardinstelling Beschrijving
assemblageOpschoning 0 Geef globaal de time-out op die moet worden toegepast op elk exemplaar van de assembly-opschoonmethode.
assemblageInitialisatie 0 Geef globaal de time-out op die moet worden toegepast op elk exemplaar van de assembly-initialisatiemethode.
classCleanup 0 Geef globaal de time-out op die moet worden toegepast op elk exemplaar van de klasse-opschoonmethode.
classInitialize 0 Geef globaal de time-out op die moet worden toegepast op elk exemplaar van de klasse-initialisatiemethode.
test 0 Geef globaal de time-out voor de test op.
testCleanup 0 Geef globaal de time-out op die moet worden toegepast op elk exemplaar van testopschoonmethode.
testInitialize 0 Geef globaal de time-out op die moet worden toegepast op elk exemplaar van de test-initialisatiemethode.
gebruikCoöperatieveAnnulering false Wanneer ingesteld op true, activeert MSTest in geval van time-out alleen de annulering van de CancellationToken, maar stopt het niet met het observeren van de methode. Dit gedrag is beter presterend, maar is afhankelijk van de gebruiker om het token correct door alle paden te laten stromen.

Notitie

[Timeout] kenmerk dat is opgegeven voor een methode, overschrijft de globale time-out. Als u bijvoorbeeld [Timeout(1000)] instelt op een methode die is gemarkeerd met [AssemblyCleanup], zal dit de globale time-out van assemblyCleanup overschrijven.

Voorbeeld van testconfig.json-bestand

In de volgende JSON ziet u de inhoud van een typisch .testconfig.json bestand. Kopieer deze code en bewerk deze naar wens.

Elk element van het bestand is optioneel omdat het een standaardwaarde heeft.

{
  "platformOptions": {
  },
  "mstest": {
    "execution": {
        "mapInconclusiveToFailed" : true,
        "disableAppDomain": true,
        "considerFixturesAsSpecialTests" : false,
    },
    "parallelism" : {
        "enabled": true,
        "scope": "method",
    },
    "output": {
        "captureTrace": false
    }
  }
}