Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
Use Microsoft. Testing.Platform (MTP) para ejecutar pruebas de MSTest dentro de una aplicación WinUI 3. La aplicación WinUI actúa como host de prueba. Posee el punto de entrada de la aplicación, el subproceso de interfaz de usuario y la duración del proceso.
Elija entre dos modelos de implementación de WinUI 3:
- Una aplicación sin empaquetar se ejecuta como un ejecutable Windows normal.
- Una aplicación empaquetada de plena confianza mantiene la identidad del paquete MSIX y usa la extensión experimental
Microsoft.Testing.Extensions.PackagedApppara registrar y activar el host de prueba.
Importante
La extensión de aplicación empaquetada admite aplicaciones de escritorio empaquetadas de plena confianza. No admite UWP ni otros hosts de prueba de AppContainer.
La activación de AUMID empaquetada de plena confianza se implementa en el microsoft/testfx repositorio, pero no está disponible en un paquete NuGet público a partir del 6 de agosto de 2026. Los paquetes actuales 1.0.0-alpha no contienen la implementación de activación específica del Windows. Use la configuración empaquetada solo después de que una versión del paquete identifique la compatibilidad con el registro MSIX de plena confianza y la activación de AUMID.
Elección de un modelo de implementación
Elija el modelo de implementación antes de configurar el proyecto de prueba.
| Requirement | Elegir | Prueba del inicio del host |
|---|---|---|
| Las pruebas no necesitan la identidad del paquete ni las API que requieren la identidad del paquete. | Desempaquetado | MTP inicia directamente el ejecutable de la aplicación. |
| Las pruebas requieren la identidad del paquete MSIX o el comportamiento de la aplicación empaquetada. | Plena confianza empaquetada después de que la versión preliminar de MTP esté disponible públicamente | La extensión de aplicación empaquetada registra la salida de compilación y activa la aplicación mediante el identificador de modelo de usuario de aplicación (AUMID). |
| Las pruebas deben ejecutarse en UWP u otro AppContainer. | VSTest | La extensión de aplicación empaquetada mtP no admite el aislamiento de AppContainer. |
A menos que las pruebas requieran la identidad del paquete, use una aplicación sin empaquetar. El modelo sin empaquetar no requiere el registro de paquetes, el modo de desarrollador ni la extensión experimental de la aplicación empaquetada.
Hasta que una versión preliminar pública de MTP incluye el registro MSIX de plena confianza y la activación de AUMID, use VSTest para pruebas winUI 3 empaquetadas de plena confianza.
Comprender el límite de UWP
No trates UWP como otro modelo winUI 3 empaquetado. Tanto los proyectos clásicos de UWP que tienen como destino UAP 10 como .NET proyectos de UWP modernos que se establecen UseUwp para true ejecutarse en un AppContainer. El empaquetado de una aplicación de escritorio winUI 3 no lo coloca en ese modelo de aplicación.
Usa VSTest para UWP clásico y pruebas modernas de .NET para UWP. El iniciador de aplicaciones empaquetadas mtP tiene como destino hosts de escritorio empaquetados de plena confianza. No puede entregar sus argumentos de activación ni la conexión del controlador a un host de AppContainer.
Para obtener una configuración moderna de .NET para UWP, consulta el ejemplo de MSTest .NET 9 para UWP.
Configuración del host de prueba de WinUI
Ambos modelos de implementación usan la misma configuración de MTP autohospedada.
Establecimiento de las propiedades comunes del proyecto
Establezca estas propiedades en el proyecto de prueba de WinUI:
<OutputType>Exe</OutputType>
<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
<UseWinUI>true</UseWinUI>
<EnableMSTestRunner>true</EnableMSTestRunner>
<GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>
Use .NET 8 o una versión de .NET compatible posterior. El ejemplo tiene como destino Windows versión 10.0.19041.0de la plataforma . La extensión de aplicación empaquetada requiere esta versión o posterior.
Mantenga el elemento winUI ApplicationDefinition que apunta al archivo XAML de la aplicación de prueba. WinUI genera un punto de entrada a partir de ese elemento. Para evitar que MTP genere un segundo punto de entrada, establezca en GenerateTestingPlatformEntryPointfalse.
Agregue referencias de paquete a las versiones compatibles actuales de MSTest y Microsoft. WindowsAppSDK.
Hospedar MTP desde la aplicación
Invalide OnLaunched en la clase WinUI Application . Cree y active la ventana de prueba y, a continuación, publique su cola del distribuidor:
_window = new UnitTestAppWindow();
_window.Activate();
UITestMethodAttribute.DispatcherQueue = _window.DispatcherQueue;
Agregue using Microsoft.VisualStudio.TestTools.UnitTesting.AppContainer; para UITestMethodAttribute.
Cree la aplicación MTP a partir de los argumentos de la línea de comandos. A continuación, registre las extensiones que MSBuild contribuye:
string[] cliArgs = Environment.GetCommandLineArgs().Skip(1)
.Where(arg => !arg.Contains("EnableMSTestRunner")).ToArray();
ITestApplicationBuilder builder = await TestApplication.CreateBuilderAsync(cliArgs);
builder.AddSelfRegisteredExtensions(cliArgs);
using ITestApplication app = await builder.BuildAsync();
Agregue using Microsoft.Testing.Platform.Builder; para los tipos de generador de MTP. La compilación de WinUI agrega EnableMSTestRunner a los argumentos de proceso. Dado que no es una opción de línea de comandos de MTP, quítelo antes de crear la aplicación de prueba.
El proyecto deshabilita el punto de entrada MTP generado, por lo que llama a AddSelfRegisteredExtensions. Para una aplicación empaquetada, el método también registra el Microsoft.Testing.Extensions.PackagedApp iniciador.
En OnLaunched, coloque la ejecución y la creación de aplicaciones de prueba en un try bloque. Asigne el resultado de await app.RunAsync() a Environment.ExitCode. En un finally bloque, cierre la ventana y llame al método de Exit la aplicación.
Los pasos del ciclo de vida proporcionan dos garantías:
- El proceso devuelve el código de salida de MTP, por lo que una prueba con error genera un código de salida de proceso distinto de cero.
- El bucle de mensajes winUI se detiene después de la ejecución en lugar de dejar activo el proceso de prueba.
Warning
No agregue [assembly: WinUITestTarget(...)] a una aplicación de prueba winUI autohospedada. El atributo inicia una aplicación WinUI para un host de prueba independiente. Una aplicación autohospedada llama Application.Start primero. A continuación, el atributo intenta iniciar una segunda aplicación en el mismo proceso.
Para obtener una implementación completa, consulte el ejemplo de WinUI sin empaquetar y el ejemplo de WinUI empaquetado.
Ejecución de pruebas en el subproceso de interfaz de usuario
Se usa UITestMethod para una prueba que crea o accede a objetos WinUI. MSTest programa la prueba en la cola del distribuidor que asignó durante OnLaunched.
[UITestMethod]
public void CreatesControlOnUiThread()
{
var grid = new Grid();
Assert.IsTrue(grid.DispatcherQueue.HasThreadAccess);
}
TestMethod Normalmente no se ejecuta en la cola del distribuidor de WinUI. Úselo para las pruebas que no requieren el subproceso de interfaz de usuario.
Configuración de una aplicación de prueba sin empaquetar
Para una aplicación sin empaquetar, agregue estas propiedades:
<WindowsPackageType>None</WindowsPackageType>
<EnableMsixTooling>false</EnableMsixTooling>
No haga referencia a Microsoft.Testing.Extensions.PackagedApp. La aplicación sin empaquetar no tiene ninguna identidad MSIX ni AppxManifest.xml en su salida, por lo que MTP puede iniciar su archivo ejecutable directamente.
De forma predeterminada, el SDK de Aplicaciones para Windows inserta su inicializador de arranque cuando el proyecto cumple estas condiciones:
-
WindowsPackageTypeesNone. -
OutputTypeesExeoWinExe. -
WindowsAppSDKSelfContainedno estrue.
Si un host que no es una aplicación de SDK de Aplicaciones para Windows carga la biblioteca de pruebas, establézcalo WindowsAppSdkBootstrapInitializetrue en en la biblioteca.
Note
VSTest no admite esta configuración de WinUI sin empaquetar. Ejecute el proyecto con MTP.
Configuración de una aplicación de prueba de plena confianza empaquetada
Mantenga la configuración de WinUI empaquetada predeterminada:
- No establezca en
WindowsPackageTypeNone. - Mantenga
Package.appxmanifesty los recursos del paquete en el proyecto. - Establézcalo
EnableMsixToolingentruesi el proyecto usa las herramientas de empaquetado MSIX de un solo proyecto.
Después de una versión preliminar que incluya el registro MSIX de plena confianza y la activación de AUMID estará disponible, agregue esa versión específica del Microsoft. Paquete Testing.Extensions.PackagedApp. No use un paquete anterior 1.0.0-alpha para esta configuración.
Las propiedades de MSBuild del paquete registran el iniciador a través AddSelfRegisteredExtensionsde . No llame también a AddPackagedAppDeployment. Una ejecución de MTP solo puede registrar un iniciador de host de prueba.
El iniciador realiza estas acciones:
- Comprueba si hay un
AppxManifest.xmlque describe el ejecutable de prueba. - Registra el diseño de la salida de compilación con Windows.
- Resuelve el AUMID de la aplicación desde el paquete registrado y el identificador de aplicación del manifiesto.
- Activa la aplicación por AUMID y conecta el proceso activado al controlador MTP.
El iniciador omite un manifiesto no relacionado en un directorio antecesor a menos que una Application entrada apunte al ejecutable de prueba. Una aplicación sin empaquetar que hace referencia al paquete indirectamente permanece en la ruta de acceso de inicio directo.
Cumpla estos requisitos antes de ejecutar una aplicación de prueba empaquetada:
- Use una plataforma de destino específica de Windows con la versión
10.0.19041.0de la plataforma o posterior. - Para registrar el diseño de salida de compilación sin firmar, habilite el modo de desarrollador o configure la instalación de prueba.
- Use una aplicación de escritorio empaquetada de plena confianza. La extensión no admite UWP ni otros hosts de AppContainer.
Caution
Microsoft.Testing.Extensions.PackagedApp y el punto de ITestHostLauncher extensión son experimentales. Una versión futura podría cambiar o quitar sus API y comportamiento. Evalúe los riesgos antes de usar el modelo empaquetado en la infraestructura de prueba de producción.
Ejecución de las pruebas
En el directorio que contiene el proyecto de prueba de WinUI, ejecute:
dotnet run
Para especificar el proyecto, use dotnet run --project .\WinUITests.csproj.
Para una aplicación sin empaquetar, MTP inicia el archivo ejecutable directamente. Para una aplicación empaquetada, el iniciador de aplicaciones empaquetada registra el diseño y activa la aplicación por AUMID.
En ambos modelos, se abre la ventana de prueba, MTP ejecuta las pruebas y se cierra la ventana. A continuación, el terminal notifica el resumen de la prueba. Una ejecución correcta se cierra con el código 0. Cuando se produce un error en una prueba, OnLaunched asigna el resultado distinto de cero RunAsync a Environment.ExitCode.
Use dotnet run para cualquiera de los modelos. Para ejecutar una aplicación desempaquetada directamente, use el ejecutable de la aplicación generada. No use dotnet exec porque WinUI resuelve los recursos PRI en relación con la ruta de acceso del proceso.
Solución de problemas de la configuración
Use estas comprobaciones para ver los errores de instalación más comunes:
| Síntoma | Check |
|---|---|
La aplicación notifica varias llamadas a Application.Start. |
Quite el WinUITestTarget atributo de la aplicación de prueba autohospedada. |
| La ejecución de prueba finaliza, pero el proceso permanece abierto. | Cierre la ventana de prueba y llame a Exit en un finally bloque después RunAsyncde . |
Las pruebas con errores siguen devolviendo el código 0de salida del proceso . |
Asigne el resultado de RunAsync a Environment.ExitCode. |
Se produce un error en una ejecución desempaquetada porque AppxManifest.xml falta. |
Confirme que el proyecto habilita MTP y que la ejecución no usa VSTest. |
| Una ejecución empaquetada no puede registrar ni activar la aplicación. | Confirme el marco de destino específico del Windows, el modo de desarrollador o la configuración de instalación de prueba, el modelo de aplicación de plena confianza y la entrada ejecutable del manifiesto. |