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.
Use Microsoft. Testing.Platform (MTP) para ejecutar pruebas de MSTest dentro de aplicaciones para UWP y WinUI 3. La aplicación actúa como host de prueba y controla tanto su hilo de interfaz de usuario como el ciclo de vida del proceso.
Importante
La matriz completa de compatibilidad de aplicaciones Windows que se describe en este artículo está disponible con MSTest 4.5 y MTP 2.5. Hasta que se publiquen las versiones estables, use paquetes 4.5 y 2.5 en versión preliminar coincidentes. Si administra paquetes MTP directamente, mantenga las versiones del paquete de plataforma y extensión alineadas.
Elección de un modelo de aplicación
MSTest.Sdk admite los siguientes modelos de aplicación Windows a través de MTP:
| Modelo de aplicación | Empaquetado y confianza | Inicio del host de prueba | Ejecute el comando |
|---|---|---|---|
UWP clásico (uap10.0) |
AppContainer empaquetado | Un sidecar de confianza total registra el paquete y activa la aplicación mediante el identificador de modelo de usuario de la aplicación (AUMID). |
MSBuild con el InvokeTestingPlatform objetivo |
UWP moderno (.NET 10 con UseUwp) |
AppContainer empaquetado | Una aplicación auxiliar de confianza total registra el paquete y activa la aplicación mediante el AUMID. |
MSBuild con el InvokeTestingPlatform objetivo |
| WinUI 3 empaquetada | Plena confianza empaquetada | Un componente auxiliar de confianza total registra el paquete y activa la aplicación mediante el AUMID. |
dotnet run o dotnet test --project |
| WinUI 3 sin empaquetar | Sin identidad de paquete, plena confianza | MTP inicia directamente el ejecutable de la aplicación. |
dotnet run o dotnet test --project |
WinUI 3 packagedClassicApp con TrustLevel="appContainer" |
AppContainer empaquetado | Un sidecar de confianza total activa la aplicación y autoriza el identificador de seguridad (SID) exacto de su paquete en las canalizaciones de comunicación MTP. |
dotnet msbuild con el InvokeTestingPlatform objetivo |
El empaquetado y el espacio aislado son opciones independientes. Una aplicación de escritorio winUI 3 empaquetada tiene identidad de paquete, pero se ejecuta como un proceso de plena confianza de forma predeterminada. Una aplicación para UWP siempre se ejecuta en AppContainer. Una aplicación winUI 3 empaquetada se ejecuta en AppContainer solo cuando su manifiesto establece TrustLevel="appContainer".
Para versiones anteriores de MSTest o MTP, mantenga la configuración de VSTest existente para proyectos de UWP. La ejecución nativa de MTP para los hosts de UWP y AppContainer requiere MSTest 4.5 y MTP 2.5.
Comprender el sidecar del modelo de aplicación MTP
En el caso de una aplicación empaquetada, el proceso de la herramienta de prueba inicial no se puede ejecutar dentro del paquete. MSTest.Sdk inicia un controlador auxiliar de confianza plena que:
- Prepara argumentos de línea de comandos y se encarga de la cancelación, los reintentos, los informes y la gestión de los códigos de salida.
- Registra el paquete de salida de compilación y activa la aplicación de manifiesto exacta por AUMID.
- Autoriza solo el SID del paquete seleccionado cuando un host de AppContainer se conecta a canalizaciones con nombre MTP.
- Recupera los artefactos TRX, de volcado, de diagnóstico y de reintento del almacenamiento del paquete.
La aplicación de prueba todavía hospeda MTP y MSTest en su propio proceso. La ejecución de UWP no requiere Microsoft.NET.Test.Sdk, vstest.console, UwpTestHostRuntimeProviderni el entorno de ejecución de implementación de Visual Studio.
Para una UWP windowsApp, Windows proporciona una cadena de activación a través de LaunchActivatedEventArgs.Arguments en lugar de argumentos de proceso normales. Llame a PackagedAppExtensions.GetTestApplicationArguments antes de crear el generador MTP. La extensión de aplicación empaquetada restaura la matriz de argumentos original y los metadatos de conexión del controlador.
Para una aplicación WinUI 3 packagedClassicApp, incluida una que se ejecute en AppContainer, utilice los argumentos de proceso normales.
Cumplir los requisitos previos
Use los requisitos previos que se aplican al proyecto:
- Use .NET SDK 10 o una versión posterior para el conjunto de herramientas MSTest 4.5 y
dotnet test --project. - Para UWP, use MSBuild de escritorio desde Visual Studio con la carga de trabajo de la Plataforma universal de Windows y el SDK de Windows requerido. Estos componentes solo proporcionan compatibilidad en tiempo de compilación.
- Para WinUI 3, instale las herramientas de desarrollo de aplicaciones de Windows y haga referencia a una versión de SDK de Aplicaciones para Windows compatible.
- En el caso de las aplicaciones de prueba empaquetadas, habilite el modo de desarrollador de Windows o configure la carga lateral para que Windows pueda registrar una distribución de salida de compilación sin firmar.
- En el caso de las aplicaciones de prueba de AppContainer, ejecute el controlador como usuario sin privilegios elevados.
Configurar pruebas para UWP
Configurar un proyecto de UWP moderno
Use MSTest.Sdk 4.5 o una versión posterior, destine .NET 10 con una versión de plataforma de Windows y establezca UseUwp en true. Mantenga la configuración de XAML, MSIX, arquitectura y AOT nativas existentes para UWP.
Visual Studio normalmente habilita UseUwpTools durante la compilación. MSTest.Sdk selecciona el modelo de aplicación para UWP cuando UseUwpTools es true, o cuando UseUwp es true y UseUwpTools aún no está establecido.
Si solo necesitas referencias de UWP en una aplicación de prueba MTP que no sea UWP, establece UseUwpTools en false. A continuación, el SDK usa el ejecutor directo de MTP, a menos que otro modelo de aplicación empaquetada requiera el sidecar.
Para ver un proyecto completo, consulta el ejemplo de MTP de UWP moderno.
Configurar un proyecto de UWP clásico
Mantenga la estructura existente del proyecto uap10.0, el conjunto de herramientas de MSBuild para escritorio y el SDK de extensiones de UWP. Importe MSTest.Sdk 4.5 o posterior y habilite el ejecutor de MSTest y MTP. MSTest.Sdk proporciona los recursos de inicialización, adaptador y tiempo de ejecución compatibles con UAP.
Para ver un proyecto completo, consulta el ejemplo de MTP de UWP clásico.
Ejecución de pruebas para UWP
Abra un powerShell para desarrolladores para Visual Studio. Compile la solución para una arquitectura concreta y, a continuación, invoque MTP:
msbuild UwpTests.sln /restore /p:Configuration=Release /p:Platform=x64
msbuild UwpTests.csproj /t:InvokeTestingPlatform /p:Configuration=Release /p:Platform=x64 /p:TestingPlatformCommandLineArguments="--report-trx"
El segundo comando registra el paquete, activa la aplicación mediante AUMID, ejecuta pruebas normales y de subprocesos de IU, copia los artefactos de resultados desde el almacenamiento del paquete y devuelve el código de salida de la ejecución de pruebas.
Configuración de pruebas de WinUI 3
Use MSTest.Sdk 4.5 o una versión posterior, establezca UseWinUI en true y tenga como destino un marco de destino específico de Windows. Para la activación empaquetada, use la versión 10.0.19041.0 o posterior de la plataforma Windows.
Hospedar MTP desde la aplicación WinUI
Para una aplicación de prueba de WinUI autohospedada, cree y active la ventana de prueba en OnLaunched y, a continuación, publique su cola de despachador:
_window = new UnitTestAppWindow();
_window.Activate();
UITestMethodAttribute.DispatcherQueue = _window.DispatcherQueue;
Ejecute el asistente MTP generado, asigne su resultado a Environment.ExitCode, cierre la ventana y llame a Exit:
Environment.ExitCode = await MicrosoftTestingPlatformApplication.RunAsync(
Environment.GetCommandLineArgs()[1..]);
Use UITestMethod para pruebas que crean o acceden a objetos WinUI. Use TestMethod para pruebas que no requieran el subproceso de interfaz de usuario.
Warning
No agregue [assembly: WinUITestTarget(...)] a una aplicación de prueba winUI autohospedada. Ese atributo inicia una aplicación WinUI para un host de prueba independiente, pero la aplicación autohospedada ya ha llamado a Application.Start.
Configuración de una aplicación sin empaquetar
Establece WindowsPackageType en None. La aplicación no tiene ninguna identidad MSIX o AppxManifest.xml, por lo que MTP inicia directamente su archivo ejecutable. No agregue manualmente la extensión de aplicación empaquetada.
El SDK de Aplicaciones para Windows normalmente inserta su inicializador de arranque cuando el proyecto cumple estas condiciones:
-
WindowsPackageTypeesNone. -
OutputTypeesExeoWinExe. -
WindowsAppSDKSelfContainedno estrue.
Si una aplicación host que no es una aplicación de SDK de Aplicaciones para Windows carga la biblioteca de pruebas, establezca WindowsAppSdkBootstrapInitialize en true en la biblioteca.
VSTest no admite aplicaciones de prueba de WinUI 3 sin empaquetar porque su proveedor de WinUI requiere un manifiesto AppX.
Para ver un proyecto completo, consulte el ejemplo mtP de WinUI sin empaquetar.
Configuración de una aplicación empaquetada de plena confianza
Mantener la configuración predeterminada empaquetada de WinUI y su Package.appxmanifest. MSTest.Sdk hace referencia a Microsoft.Testing.Extensions.PackagedApp y lo registra automáticamente para el proyecto empaquetado.
Tampoco llame a AddPackagedAppDeployment. Una ejecución de MTP solo puede registrar un iniciador de host de prueba. Establezca false en EnableMicrosoftTestingExtensionsPackagedApp solo cuando un lanzador personalizado controle la activación empaquetada.
Para ver un proyecto completo, consulte el ejemplo empaquetado de MTP para WinUI.
Configuración de una aplicación AppContainer
En el manifiesto del paquete winUI, configure la aplicación como packagedClassicApp y establezca TrustLevel="appContainer". MTP 2.5 autoriza el SID exacto del paquete en el controlador y los canales de extensión. No otorga ALL APPLICATION PACKAGES ni requiere una exención de bucle de retorno.
Ejecute el sidecar sin privilegios elevados. Use el destino InvokeTestingPlatform para que el sidecar pueda copiar los resultados y los diagnósticos desde el paquete LocalState al directorio de resultados solicitado.
Para ver un proyecto completo, consulte el ejemplo de MTP de WinUI AppContainer.
Ejecución de pruebas de WinUI 3
Compilar para una arquitectura concreta. Para una aplicación empaquetada de plena confianza o sin empaquetar, ejecute:
dotnet build -p:Platform=x64
dotnet test --project . --no-build -p:Platform=x64
También se puede usar dotnet run --no-build -p:Platform=x64.
En el caso de una aplicación WinUI de AppContainer, use el destino sidecar y un directorio de resultados absoluto:
dotnet msbuild .\WinUITests.csproj -t:InvokeTestingPlatform -p:Platform=x64 "-p:TestingPlatformCommandLineArguments=--report-trx --results-directory C:\TestResults"
No use dotnet exec para una aplicación WinUI. WinUI resuelve los recursos PRI en relación con la ruta de acceso del proceso.
Solucionar problemas de configuración
| Síntoma | Check |
|---|---|
La aplicación notifica varias llamadas a Application.Start. |
Quite el WinUITestTarget atributo de una aplicación de prueba winUI autohospedada. |
| La ejecución de prueba finaliza, pero el proceso permanece abierto. | Cierre la ventana de prueba y llame Exit después de que se complete la ejecución de MTP. |
Las pruebas con errores devuelven el código 0de salida del proceso . |
Asigne el resultado de ejecución de MTP a Environment.ExitCode. |
Una ejecución sin empaquetar de WinUI informa de que falta AppxManifest.xml. |
Confirme que el proyecto usa MTP en lugar de VSTest. |
| Una ejecución empaquetada no puede registrar ni activar la aplicación. | Confirme el marco de destino de Windows, el Modo de desarrollador o la directiva de carga local de aplicaciones, la arquitectura y la entrada del ejecutable en el manifiesto. |
| Un host de AppContainer no se puede conectar al controlador. | Use MSTest 4.5 y MTP 2.5 o una versión posterior, y ejecute el controlador sin privilegios elevados. |
| Un informe de AppContainer no se copia en el directorio solicitado. | Use InvokeTestingPlatform y especifique un directorio de resultados absoluto. |