Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El modo de servidor MTP permite a un editor, IDE u otra herramienta de prueba iniciar una aplicación de prueba y impulsar la detección y ejecución mediante JSON-RPC. Use el modo de servidor al crear herramientas alrededor de MTP. En el caso de las ejecuciones normales de línea de comandos y CI, ejecute la aplicación de prueba directamente o use dotnet test.
Inicie el servidor JSON-RPC público con --server o --server jsonrpc.
Importante
El SDK de .NET utiliza un protocolo binario interno separado a través de --server dotnettestcli. No pases ese valor tú mismo.
dotnet test configura los argumentos de transporte y protocolo.
Utiliza el cliente solo fuente.
La versión preliminar de MTP 2.4 proporciona un cliente de JSON-RPC canónico. Agregue el paquete Microsoft.Testing.Platform.ServerMode.Client.Sources. El paquete inyecta código fuente de C# en su proyecto en lugar de añadir un ensamblado en tiempo de ejecución.
El diseño basado únicamente en el origen proporciona:
- No hay ningún archivo DLL en tiempo de ejecución ni dependencia de implementación adicional.
- Serialización nativa compatible con AOT y sin reflexión.
- Tipos de protocolo y código de serialización del mismo repositorio que el servidor MTP.
Los tipos inyectados MtpServerClient, IMtpServerClient y de protocolo pueden inicializar una conexión, descubrir pruebas, ejecutar pruebas, solicitar el cierre del servidor e informar de actualizaciones de nodos de prueba. Todos los tipos inyectados siguen siendo internal para el ensamblado consumidor.
Cumplir los requisitos del cliente
Use C# 12 o una versión posterior. El paquete se establece LangVersion en 12.0 cuando el proyecto no especifica una versión de idioma. También proporciona tipos de compatibilidad internos para .NET Framework 4.6.2 y netstandard2.0.
Quite cualquier copia escrita a mano del cliente MTP antes de agregar el paquete para evitar tipos internos duplicados.
Elección de un modelo de inicio
Para iniciar la aplicación de prueba como un proceso externo, use MtpServerClient.LaunchAsync. El cliente es el propietario de ese proceso hijo y lo cierra durante la desactivación cuando es necesario.
Para un host embebido o un entorno con hilo de interfaz de usuario que no puede usar Process.Start, use MtpServerClient.LaunchInProcessAsync. El método ejecuta la aplicación de prueba a través de una devolución de llamada asincrónica en el proceso actual. No bloquee el hilo de inicio porque la función de devolución de llamada y el cliente comparten el proceso.
Ambos modelos de ejecución utilizan un transporte TCP de bucle cerrado. El navegador WebAssembly no puede crear el listener requerido, por lo que el inicio en el proceso genera PlatformNotSupportedException. La ejecución en proceso no ofrece un transporte alternativo de WebAssembly.
Apagar el cliente
Para desmontar el cliente y la aplicación iniciada sin bloquear el hilo de llamada, llame a IMtpServerClient.ShutdownAsync(). El método asíncrono evita problemas de capacidad de respuesta del hilo de la interfaz de usuario y de interbloqueo en hosts integrados.
En el caso de un host en proceso, MtpServerClientOptions.ServerShutdownTimeout controla cuánto tiempo espera la desmontaje después de que el cliente cierre el transporte. El valor predeterminado es 30 segundos. Lee ServerExitCode tras el apagado para obtener el código de salida de la llamada de retorno. El valor permanece null mientras la aplicación se ejecuta o cuando se produce un error en la aplicación en lugar de devolver un código de salida.
Elección del comportamiento de la conexión
Configure MtpServerClientOptions.IsStateful para indicar al servidor si el cliente conserva el estado a través de las solicitudes:
- Deje el valor
falsepara una sola solicitud de detección o ejecución y, a continuación, salga. - Establezca el valor
trueen para una sesión de editor o IDE que envíe varias solicitudes a través de la misma conexión.
El cliente envía esta configuración a través de la funcionalidad del protocolo experimental capabilities.testing.isStateful .