Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Im MTP-Servermodus kann ein Editor, eine IDE oder ein anderes Testtool eine Testanwendung starten und die Ermittlung und Ausführung über JSON-RPC steuern. Verwenden Sie den Servermodus, wenn Sie Tools um MTP erstellen. Führen Sie für reguläre Befehlszeilen- und CI-Läufe die Testanwendung direkt aus oder verwenden Sie dotnet test.
Starten Sie den öffentlichen JSON-RPC-Server mit --server oder --server jsonrpc.
Important
Das .NET SDK verwendet ein separates internes binärprotokoll über --server dotnettestcli. Übergeben Sie diesen Wert nicht selbst.
dotnet test konfiguriert die Transport- und Protokollargumente.
Nur den Quellclient verwenden
Die MTP 2.4-Vorschau bietet einen kanonischen JSON-RPC Client. Fügen Sie das Paket Microsoft.Testing.Platform.ServerMode.Client.Sources hinzu. Das Paket fügt die C#-Quelle in Ihr Projekt ein, anstatt eine Laufzeitassembly hinzuzufügen.
Das Source-only-Design bietet Folgendes:
- Keine Laufzeit-DLL oder zusätzliche Bereitstellungsabhängigkeit.
- Native AOT-kompatible, spiegellose Serialisierung.
- Protokolltypen und Serialisierungscode aus demselben Repository wie der MTP-Server.
Die injizierten MtpServerClient, IMtpServerClient und Protokolltypen können eine Verbindung initialisieren, Tests ermitteln, Tests ausführen, das Beenden des Servers anfordern und Aktualisierungen von Testknoten melden. Alle injizierten Typen bleiben internal für die verbrauchende Assembly.
Erfüllen der Clientanforderungen
Verwenden Sie C# 12 oder höher. Das Paket setzt LangVersion auf 12.0, wenn Ihr Projekt keine Sprachversion angibt. Außerdem stellt es interne Kompatibilitätstypen für .NET Framework 4.6.2 und netstandard2.0 bereit.
Entfernen Sie alle handschriftlichen Kopien des MTP-Clients, bevor Sie das Paket hinzufügen, um doppelte interne Typen zu vermeiden.
Auswählen eines Startmodells
Um die Testanwendung als externen Prozess zu starten, verwenden Sie MtpServerClient.LaunchAsync. Der Client ist für diesen untergeordneten Prozess verantwortlich und beendet ihn bei der Entfernung, wenn nötig.
Für eine eingebettete Host- oder UI-Thread-Umgebung, die MtpServerClient.LaunchInProcessAsync nicht verwenden kann, verwenden Sie Process.Start. Die Methode führt die Testanwendung mittels eines asynchronen Callbacks im aktuellen Prozess aus. Blockieren Sie nicht den Thread, der den Startvorgang ausführt, da sich Callback und Client denselben Prozess teilen.
Beide Startmodelle verwenden einen Loopback-TCP-Transport. Browser WebAssembly kann den erforderlichen Listener nicht erstellen, daher löst der In-Process-Start PlatformNotSupportedException aus. Der In-Process-Startvorgang stellt keine alternative WebAssembly-Transportmethode bereit.
Client herunterfahren
Rufen Sie IMtpServerClient.ShutdownAsync() auf, um den Client und die gestartete Anwendung zu beenden, ohne den aufrufenden Thread zu blockieren. Die asynchrone Methode vermeidet die Reaktionsfähigkeit von UI-Thread und Deadlock-Probleme in eingebetteten Hosts.
Bei einem In-Process-Host steuert MtpServerClientOptions.ServerShutdownTimeout, wie lange der Abbau wartet, nachdem der Client die Transportverbindung geschlossen hat. Der Standardwert ist 30 Sekunden. Lesen Sie ServerExitCode nach dem Beenden, um den Exit-Code des Callbacks zu erhalten. Der Wert verbleibt null , während die Anwendung ausgeführt wird oder wenn die Anwendung fehlschlägt, anstatt einen Ausgangscode zurückzugeben.
Verbindungsverhalten auswählen
Legen Sie MtpServerClientOptions.IsStateful fest, um dem Server mitzuteilen, ob der Client den Zustand über Anfragen hinweg beibehält:
- Lassen Sie den Wert
falsefür eine einzelne Ermittlungs- oder Ausführungsanforderung, gefolgt von „Exit“. - Legen Sie den Wert
truefür eine Editor- oder IDE-Sitzung fest, die mehrere Anforderungen über dieselbe Verbindung sendet.
Der Client sendet diese Einstellung über die experimentelle capabilities.testing.isStateful Protokollfunktion.