Freigeben über


Konfigurieren von „MSTest“

MSTest (Microsoft Testing Framework) ist ein Testframework für .NET-Anwendungen. Sie können damit Tests schreiben und ausführen und Testsuites mit Integration in die Test-Explorer von Visual Studio und Visual Studio Code, die .NET CLI und viele CI-Pipelines bereitstellen.

MSTest ist ein vollständig unterstütztes und plattformübergreifendes Open-Source-Testframework, das mit allen unterstützten .NET-Zielen (.NET Framework, .NET Core, .NET, UWP, WinUI usw.) funktioniert, die auf GitHub gehostet werden.

Runsettings

Eine RUNSETTINGS-Datei kann verwendet werden, um die Ausführung von Komponententests zu konfigurieren. Weitere Informationen zur runsettings-Datei und den Konfigurationen im Zusammenhang mit der Plattform finden Sie in der VSTest-Dokumentation zur runsettings-Datei und der MSTest-Dokumentation zur runsettings-Datei für Runner.

MSTest-Element

Mit den folgenden runsettings-Einträgen können Sie konfigurieren, wie sich MSTest verhalten soll.

Konfiguration Standard Werte
AssemblyCleanupTimeout 0 Geben Sie global das Timeout an, das für jede Instanz der Assemblybereinigungsmethode angewendet werden soll. Das [Timeout]-Attribut, das für die Assemblybereinigungsmethode angegeben ist, überschreibt das globale Timeout.
AssemblyInitializeTimeout 0 Geben Sie global das Timeout an, das für jede Instanz der Assemblyinitialisierungsmethode angewendet werden soll. Das [Timeout]-Attribut, das für die Assemblyinitialisierungsmethode angegeben ist, überschreibt das globale Timeout.
AssemblyResolution False Sie können Pfade zu weiteren Assemblys angeben, wenn Komponententests gefunden und ausgeführt werden. Verwenden Sie diese Pfade beispielsweise für Abhängigkeitsassemblys, die sich nicht im selben Verzeichnis wie die Testassembly befinden. Um einen Pfad anzugeben, verwenden Sie ein Directory Path-Element. Pfade können Umgebungsvariablen enthalten.

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

Dieses Feature wird nur bei Verwendung eines .NET Framework-Ziels angewandt.
CaptureTraceOutput true Erfassen Sie Textnachrichten von den APIs Console.Write*, Trace.Write* und Debug.Write*, die dem aktuellen ausgeführten Test zugeordnet werden.
ClassCleanupLifecycle EndOfClass Wenn die Klassenbereinigung am Ende der Assembly erfolgen soll, legen Sie den Wert auf EndOfAssembly fest. (Wird ab MSTest 4 nicht mehr unterstützt, da EndOfClass das Standardverhalten und auch das einzige Verhalten für ClassCleanup ist.)
ClassCleanupTimeout 0 Geben Sie global das Timeout an, das für jede Instanz der Klassenbereinigungsmethode angewendet werden soll. Das [Timeout]-Attribut, das für die Klassenbereinigungsmethode angegeben ist, überschreibt das globale Timeout.
ClassInitializeTimeout 0 Geben Sie global das Timeout an, das für jede Instanz der Klasseninitialisierungsmethode angewendet werden soll. Das [Timeout]-Attribut, das für die Klasseninitialisierungsmethode angegeben ist, überschreibt das globale Timeout.
ConsiderFixturesAsSpecialTests False Um AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup als einzelne Einträge im Protokoll Test Explorer und .trx von Visual Studio und Visual Studio Code anzuzeigen, legen Sie diesen Wert auf true fest.
DeleteDeploymentDirectoryAfterTestRunIsComplete true Legen Sie diesen Wert auf FALSE fest, um das Bereitstellungsverzeichnis nach einem Testlauf beizubehalten.
DeploymentEnabled true Wenn Sie den Wert auf false festlegen, werden in der Testmethode angegebene Bereitstellungselemente nicht in das Bereitstellungsverzeichnis kopiert.
DeployTestSourceDependencies true Ein Wert, der angibt, ob die Testquellverweise bereitgestellt werden sollen.
EnableBaseClassTestMethodsFromOtherAssemblies true Ein Wert, der angibt, ob die Ermittlung von Testmethoden aus Basisklassen in einer anderen Assembly als der geerbten Testklasse aktiviert werden soll.
ForcedLegacyMode False In älteren Versionen von Visual Studio wurde der MSTest-Adapter für eine schnellere Geschwindigkeit und bessere Skalierbarkeit optimiert. Einige Verhalten, z. B. die Reihenfolge der Testausführung, sind möglicherweise nicht mehr so präzise wie in den vorherigen Versionen von Visual Studio. Legen Sie den Wert auf TRUE fest, um den älteren Testadapter zu verwenden.

Beispielsweise können Sie diese Einstellung verwenden, wenn Sie eine app.config-Datei für einen Komponententest angegeben haben.

Eventuell sollten Sie in Betracht ziehen, die Tests so umzugestalten, dass Sie den späteren Adapter verwenden können.
MapInconclusiveToFailed False Wird ein Test mit einem nicht eindeutigen Status abgeschlossen, wird er im Test-Explorer dem Status „Übersprungen“ zugeordnet. Wenn nicht eindeutige Tests als fehlerhaft angezeigt werden sollen, verwenden Sie den Wert TRUE.
MapNotRunnableToFailed true Ein Wert, der angibt, ob einem Test mit Fehler ein „Nicht ausführbar“-Ergebnis zugeordnet wird.
OrderTestsByNameInClass False Wenn Sie Tests sowohl in Test Explorers als auch in der Befehlszeile nach Testnamen ausführen möchten, setzen Sie diesen Wert auf wahr.
Parallelize Wird verwendet, um die Parallelisierungseinstellungen festzulegen:

Workers: Die Anzahl der Threads/Worker, die für die Parallelisierung verwendet werden sollen. Dies ist standardmäßig die Anzahl von Prozessoren auf dem aktuellen Computer.

SCOPE-: Der Bereich der Parallelisierung. Sie können dies auf MethodLevel festlegen. Die Standardeinstellung ist jedoch ClassLevel.

<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize>
SettingsFile Sie können eine Testeinstellungsdatei, die mit dem MS-Testadapter verwendet werden soll, hier angeben. Sie können auch eine Testeinstellungsdatei im Menü „Einstellungen“ angeben.

Wenn Sie diesen Wert angeben, müssen Sie außerdem ForcedLegacyMode auf truefestlegen.

<ForcedLegacyMode>true</ForcedLegacyMode>
TestCleanupTimeout 0 Geben Sie global das Timeout an, das für jede Instanz der Testbereinigungsmethode angewendet werden soll. Das [Timeout]-Attribut, das für die Testbereinigungsmethode angegeben ist, überschreibt das globale Timeout.
TestInitializeTimeout 0 Geben Sie global das Timeout an, das für jede Instanz der Testinitialisierungsmethode angewendet werden soll. Das [Timeout]-Attribut, das für die Testinitialisierungsmethode angegeben ist, überschreibt das globale Timeout.
TestTimeout 0 Ruft das angegebene globale Testfalltimeout ab.
TreatClassAndAssemblyCleanupWarningsAsErrors False Um Fehler in Klassenbereinigungen als Fehler anzuzeigen, legen Sie diesen Wert auf true fest.
TreatDiscoveryWarningsAsErrors False Wenn Sie Testerkennungswarnungen als Fehler melden möchten, legen Sie diesen Wert auf true fest.

TestRunParameter-Element

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

Testlaufparameter bieten eine Möglichkeit zum Definieren von Variablen und Werten, die für die Tests zur Laufzeit verfügbar sind. Mithilfe der MSTest-Eigenschaft TestContext.Properties können Sie auf die Parameter zugreifen:

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

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

Fügen Sie Ihrer Testklasse eine öffentliche TestContext-Eigenschaft hinzu, um Testlaufparameter zu verwenden.

Beispiel für eine RUNSETTINGS-Datei

Der folgende XML-Code ist ein Beispiel für den Inhalt einer typischen RUNSETTINGS-Datei. Kopieren Sie diesen Code, und passen Sie ihn Ihren Anforderungen entsprechend an.

Alle Elemente der Datei sind optional, da sie einen Standardwert enthalten.

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

Wenn Sie Ihre Tests mit MSTest ausführen, können Sie eine testconfig.json Datei verwenden, um das Verhalten des Testläufers zu konfigurieren. Die testconfig.json Datei ist eine JSON-Datei, die die Konfigurationseinstellungen für den Testläufer enthält. Die Datei wird verwendet, um den Testläufer und die Testausführungsumgebung zu konfigurieren. Weitere Informationen finden Sie unter Microsoft.Testing.Platform testconfig.json Dokumentation.

Ab MSTest 3.7 können Sie auch die MSTest-Testläufe in derselben Konfigurationsdatei konfigurieren. In den folgenden Abschnitten werden die Einstellungen beschrieben, die Sie in der datei testconfig.json verwenden können.

MSTest-Element

MSTest-Einstellungen werden nach Funktionen gruppiert, die in den folgenden Abschnitten beschrieben werden.

Eingabe Standard Beschreibung
orderTestsByNameInClass False Wenn Sie Tests sowohl in Test Explorers als auch in der Befehlszeile nach Testnamen ausführen möchten, setzen Sie diesen Wert auf wahr.
enableBaseClassTestMethodsFromOtherAssemblies true Ein Wert, der angibt, ob die Ermittlung von Testmethoden aus Basisklassen in einer anderen Assembly als der geerbten Testklasse aktiviert werden soll.
KlasseBereinigungLebenszyklus EndOfAssembly Wenn Sie möchten, dass die Klassenbereinigung am Ende der Klasse stattfindet, setzen Sie sie auf EndOfClass.

AssemblyResolution-Einstellungen

Eingabe Standard Beschreibung
Pfade Nichts Sie können Pfade zu weiteren Assemblys angeben, wenn Komponententests gefunden und ausgeführt werden. Verwenden Sie diese Pfade beispielsweise für Abhängigkeitsassemblys, die sich nicht im selben Verzeichnis wie die Testassembly befinden. Sie können einen Pfad in der Form { "path": "...", "includeSubDirectories": "true/false" }angeben.

Bereitstellungseinstellungen

Eingabe Standard Beschreibung
deleteDeploymentDirectoryAfterTestRunIsComplete true Legen Sie diesen Wert auf FALSE fest, um das Bereitstellungsverzeichnis nach einem Testlauf beizubehalten.
deployTestSourceDependencies true Gibt an, ob die Testquellennachweise bereitgestellt werden sollen.
enabled true Wenn Sie den Wert auf false festlegen, werden in der Testmethode angegebene Bereitstellungselemente nicht in das Bereitstellungsverzeichnis kopiert.

Ausgabeeinstellungen

Eingabe Standard Beschreibung
captureTrace False Erfassen Sie Textnachrichten von den APIs Console.Write*, Trace.Write* und Debug.Write*, die dem aktuellen ausgeführten Test zugeordnet werden.

Parallelitätseinstellungen

Eingabe Standard Beschreibung
enabled False Testparallelisierung aktivieren.
scope class Der Umfang der Parallelisierung. Sie können sie auf methodfestlegen. Der Standardwert classentspricht dem sequenziellen Ausführen aller Tests einer bestimmten Klasse, während mehrere Klassen parallel laufen.
Arbeiter 0 Die Anzahl der Threads/Worker, die für die Parallelisierung verwendet werden sollen. Der Standardwert entspricht der Anzahl der Prozessoren auf dem aktuellen Computer.

Einstellungen zur Ausführung

Eingabe Standard Beschreibung
considerEmptyDataSourceAsInclusive False Bei Einstellung auf true, eine leere Datenquelle wird als nicht schlüssig betrachtet.
considerFixturesAsSpecialTests False Zur Anzeige AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup als einzelne Einträge in Visual Studio und Visual Studio Code Test Explorer und .trx log, setzen Sie diesen Wert auf wahr.
mapInconclusiveToFailed False Wird ein Test mit einem nicht eindeutigen Status abgeschlossen, wird er im Test-Explorer dem Status „Übersprungen“ zugeordnet. Wenn nicht eindeutige Tests als fehlerhaft angezeigt werden sollen, verwenden Sie den Wert TRUE.
mapNotRunnableToFailed true Ein Wert, der angibt, ob einem Test mit Fehler ein „Nicht ausführbar“-Ergebnis zugeordnet wird.
treatClassAndAssemblyCleanupWarningsAsErrors False Um Fehler in Klassenbereinigungen als Fehler anzuzeigen, legen Sie diesen Wert auf true fest.
BehandleEntdeckungswarnungenAlsFehler False Wenn Sie Testerkennungswarnungen als Fehler melden möchten, legen Sie diesen Wert auf true fest.

Timeouteinstellungen

Eingabe Standard Beschreibung
assemblyCleanup 0 Geben Sie global das Timeout an, das für jede Instanz der Assemblybereinigungsmethode angewendet werden soll.
assemblyInitialize 0 Geben Sie global das Timeout an, das für jede Instanz der Assemblyinitialisierungsmethode angewendet werden soll.
classCleanup 0 Geben Sie global das Timeout an, das für jede Instanz der Klassenbereinigungsmethode angewendet werden soll.
classInitialize 0 Geben Sie global das Timeout an, das für jede Instanz der Klasseninitialisierungsmethode angewendet werden soll.
test 0 Legen Sie die Zeitüberschreitung für den Test global fest.
testSäuberung 0 Geben Sie global das Timeout an, das für jede Instanz der Testbereinigungsmethode angewendet werden soll.
testInitialize 0 Geben Sie global das Timeout an, das für jede Instanz der Testinitialisierungsmethode angewendet werden soll.
useCooperativeCancellation False Bei Einstellung auf true, im Falle einer Zeitüberschreitung löst MSTest nur den Abbruch der CancellationToken wird aber nicht aufhören, die Methode zu beobachten. Dieses Verhalten ist effizienter, setzt jedoch voraus, dass der Benutzer das Token ordnungsgemäß durch alle Pfade führt.

Anmerkung

[Timeout] Attribut, das für eine Methode angegeben wurde, überschreibt das globale Timeout. Zum Beispiel, [Timeout(1000)] auf eine mit [AssemblyCleanup] gekennzeichnete Methode überschreibt die globale assemblyCleanup Zeitüberschreitung.

Beispiel testconfig.json Datei

Der folgende JSON-Code zeigt den Inhalt einer typischen .testconfig.json Datei. Kopieren Sie diesen Code, und passen Sie ihn Ihren Anforderungen entsprechend an.

Alle Elemente der Datei sind optional, da sie einen Standardwert enthalten.

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