Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Usare Microsoft. Testing.Platform (MTP) per eseguire test MSTest all'interno di applicazioni UWP e WinUI 3. L'applicazione funge da host di test e possiede il thread dell'interfaccia utente e la durata del processo.
Importante
La matrice di supporto completa dell'applicazione Windows descritta in questo articolo è disponibile con MSTest 4.5 e MTP 2.5. Fino al rilascio delle versioni stabili, usare i pacchetti di anteprima 4.5 e 2.5 corrispondenti. Se gestisci direttamente i pacchetti MTP, mantieni allineate le versioni dei pacchetti della piattaforma e dell’estensione.
Scegliere un modello di applicazione
MSTest.Sdk supporta i modelli di applicazione Windows seguenti tramite MTP:
| Modello di applicazione | Pacchettizzazione e fiducia | Testare l'avvio dell'host | Eseguire il comando |
|---|---|---|---|
UWP classico (uap10.0) |
AppContainer in pacchetto | Un sidecar a attendibilità completa registra il pacchetto e attiva l'app tramite l'ID modello utente dell'applicazione (AUMID). |
MSBuild con la InvokeTestingPlatform destinazione |
Piattaforma UWP moderna (.NET 10 con UseUwp) |
AppContainer pacchettizzato | Un sidecar completamente attendibile registra il pacchetto e attiva l'app tramite AUMID. |
MSBuild con destinazione InvokeTestingPlatform |
| WinUI 3 pacchettizzata | Attendibilità totale in pacchetto | Un sidecar a attendibilità completa registra il pacchetto e attiva l'app tramite AUMID. |
dotnet run oppure dotnet test --project |
| WinUI 3 versione non pacchettizzata | Nessuna identità del pacchetto, attendibilità totale | MTP avvia direttamente l'eseguibile dell'app. |
dotnet run oppure dotnet test --project |
WinUI 3 packagedClassicApp con TrustLevel="appContainer" |
AppContainer in pacchetto | Un sidecar a attendibilità completa attiva l'app e autorizza lo specifico identificatore di sicurezza (SID) del pacchetto sulle pipe di comunicazione MTP. |
dotnet msbuild con la destinazione InvokeTestingPlatform |
La pacchettizzazione e l'isolamento in ambiente sandbox sono scelte separate. Un'app desktop WinUI 3 pacchettizzata ha l'identità del pacchetto, ma per impostazione predefinita viene eseguita come processo con attendibilità completa. Un'app UWP viene sempre eseguita in AppContainer. Un'app WinUI 3 pacchettizzata viene eseguita in AppContainer solo se il relativo manifest imposta TrustLevel="appContainer".
Per le versioni precedenti di MSTest o MTP, mantenere la configurazione VSTest esistente per i progetti UWP. L'esecuzione MTP nativa per gli host UWP e AppContainer richiede MSTest 4.5 e MTP 2.5.
Comprendere il sidecar del modello di app MTP
Per un'app in pacchetto, il processo iniziale dello strumento di test non può essere eseguito all'interno del pacchetto. MSTest.Sdk avvia un controller sidecar a attendibilità completa che:
- Prepara gli argomenti della riga di comando e gestisce la cancellazione, i tentativi di ripetizione, la generazione di report e la gestione del codice di uscita.
- Registra il pacchetto di output della compilazione e attiva l'applicazione del manifesto specifica tramite AUMID.
- Autorizza solo il SID del pacchetto selezionato quando un host di AppContainer si connette alle pipe denominate MTP.
- Recupera gli artefatti TRX, dump, diagnostici e di nuovo tentativo dall'archiviazione di proprietà del pacchetto.
L'applicazione di test ospita ancora MTP e MSTest nel proprio processo. L'esecuzione UWP non richiede Microsoft.NET.Test.Sdk, vstest.console, UwpTestHostRuntimeProvidero il runtime di distribuzione Visual Studio.
Per una piattaforma UWPwindowsApp, Windows fornisce una stringa di attivazione tramite LaunchActivatedEventArgs.Arguments anziché gli argomenti di processo normali. Chiamare PackagedAppExtensions.GetTestApplicationArguments prima di creare il generatore MTP. L'estensione packaged-app ripristina la matrice di argomenti originale e i metadati di connessione del controller.
Per un winUI 3 packagedClassicApp, incluso quello eseguito in AppContainer, usare gli argomenti di processo normali.
Soddisfare i prerequisiti
Usare i prerequisiti applicabili al progetto:
- Usare .NET SDK 10 o versione successiva per la toolchain MSTest 4.5 e
dotnet test --project. - Per UWP, usa MSBuild desktop da Visual Studio con il carico di lavoro piattaforma UWP (Universal Windows Platform) e l'SDK di Windows necessario. Questi componenti forniscono solo supporto in fase di compilazione.
- Per WinUI 3, installare gli strumenti di sviluppo di applicazioni Windows e fare riferimento a una versione SDK per app di Windows compatibile.
- Per le app di test pacchettizzate, attivare la Modalità sviluppatore di Windows o configurare il sideloading in modo che Windows possa registrare un layout di output della compilazione non firmato.
- Per le app di test di AppContainer, eseguire il controller come utente non con privilegi elevati.
Configurare test UWP
Configurare un progetto UWP moderno
Usare MSTest.Sdk 4.5 o versione successiva, usare .NET 10 come destinazione specificando una versione della piattaforma Windows e impostare UseUwp su true. Mantenere le impostazioni XAML UWP, MSIX, architettura e AOT native esistenti.
Visual Studio normalmente abilita UseUwpTools durante la compilazione. MSTest.Sdk seleziona il modello di applicazione UWP quando UseUwpTools è trueo quando UseUwp è true e UseUwpTools non è ancora impostato.
Se hai bisogno solo di riferimenti UWP in un'applicazione di test MTP non UWP, imposta UseUwpTools su false. L’SDK usa quindi il runner MTP diretto, a meno che un altro modello di applicazione pacchettizzata non richieda il sidecar.
Per un progetto completo, vedi l'esempio UWP MTP moderno.
Configurare un progetto UWP classico
Mantenere la struttura del progetto esistente uap10.0, la toolchain desktop di MSBuild e l'SDK di estensione UWP. Importare MSTest.Sdk 4.5 o versione successiva e abilitare MSTest runner e MTP. MSTest.Sdk fornisce gli asset di bootstrap, adapter e runtime compatibili con UAP.
Per un progetto completo, vedi l'esempio UWP MTP classico.
Eseguire test UWP
Aprire powerShell per sviluppatori per Visual Studio. Compilare la soluzione per un'architettura concreta e quindi richiamare 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"
Il secondo comando registra il pacchetto, attiva l'app tramite AUMID, esegue test regolari e thread dell'interfaccia utente, copia gli artefatti dei risultati dall'archiviazione dei pacchetti e restituisce il codice di uscita dell'esecuzione del test.
Configurare test di WinUI 3
Usa MSTest.Sdk 4.5 o versione successiva, imposta UseWinUI su true e usa come destinazione un framework di destinazione specifico per Windows. Per l'attivazione del pacchetto, usare Windows Platform versione 10.0.19041.0 o successiva.
Ospitare MTP in un'applicazione WinUI
Per un'app di test WinUI autonoma, creare e attivare la finestra di test in OnLaunched, quindi pubblicarne la coda del dispatcher:
_window = new UnitTestAppWindow();
_window.Activate();
UITestMethodAttribute.DispatcherQueue = _window.DispatcherQueue;
Eseguire l'helper MTP generato, assegnarne il risultato a Environment.ExitCode, chiudere la finestra e chiamare Exit:
Environment.ExitCode = await MicrosoftTestingPlatformApplication.RunAsync(
Environment.GetCommandLineArgs()[1..]);
Usare UITestMethod per i test che creano o accedono a oggetti WinUI. Usare TestMethod per i test che non richiedono il thread dell'interfaccia utente.
Avvertimento
Non aggiungere [assembly: WinUITestTarget(...)] a un'app di test WinUI autonoma. Questo attributo avvia un'applicazione WinUI per un host di test separato, ma l'app self-hosted ha già chiamato Application.Start.
Configurare un'app senza pacchetto
Impostare WindowsPackageType su None. L'app non ha identità MSIX o AppxManifest.xml, quindi MTP avvia direttamente il file eseguibile. Non aggiungere manualmente l'estensione packaged-app.
Il SDK per app di Windows in genere inserisce il relativo inizializzatore bootstrap quando il progetto soddisfa queste condizioni:
-
WindowsPackageTypeèNone. -
OutputTypeèExeoWinExe. -
WindowsAppSDKSelfContainednon ètrue.
Se un host che non è un'app SDK per app di Windows carica la tua libreria di test, imposta WindowsAppSdkBootstrapInitialize su true nella libreria.
VSTest non supporta app di test WinUI 3 senza pacchetti perché il provider WinUI richiede un manifesto AppX.
Per un progetto completo, vedi l'esempio WinUI MTP senza pacchetto.
Configurare un'app full-trust pacchettizzata
Mantieni la configurazione WinUI predefinita inclusa nel pacchetto e il suo Package.appxmanifest. MSTest.Sdk fa riferimento a e registra automaticamente Microsoft.Testing.Extensions.PackagedApp per il progetto pacchettizzato.
Non chiamare anche AddPackagedAppDeployment. Un'esecuzione MTP può registrare un solo programma di avvio dell'host di test. Impostare EnableMicrosoftTestingExtensionsPackagedApp su false solo quando un launcher personalizzato gestisce l'attivazione del pacchetto.
Per un progetto completo, vedi l'esempio di WinUI MTP in pacchetto.
Configurare un'app AppContainer
Nel manifesto del pacchetto WinUI configurare l'applicazione come packagedClassicApp e impostare TrustLevel="appContainer". MTP 2.5 autorizza l'esatto SID del pacchetto sul controllore e sulle pipe di estensione. Non concede ALL APPLICATION PACKAGES o richiede un'esenzione di loopback.
Eseguire il sidecar senza privilegi elevati. Usa il target InvokeTestingPlatform in modo che il sidecar possa copiare i risultati e i dati di diagnostica dal pacchetto LocalState nella directory dei risultati richiesta.
Per un progetto completo, vedi l'esempio Di AppContainer WinUI MTP.
Eseguire test winUI 3
Compilazione per un'architettura concreta. Per un'app con attendibilità totale o senza pacchetti, eseguire:
dotnet build -p:Platform=x64
dotnet test --project . --no-build -p:Platform=x64
È anche possibile usare dotnet run --no-build -p:Platform=x64.
Per un'app WinUI AppContainer, usa la destinazione sidecar e una directory dei risultati assoluti:
dotnet msbuild .\WinUITests.csproj -t:InvokeTestingPlatform -p:Platform=x64 "-p:TestingPlatformCommandLineArguments=--report-trx --results-directory C:\TestResults"
Non usare dotnet exec per un'app WinUI. WinUI risolve le risorse PRI relative al percorso del processo.
Risolvere i problemi di configurazione
| Sintomo | Controlla |
|---|---|
L'app segnala più chiamate a Application.Start. |
Rimuovere l'attributo WinUITestTarget da un'app di test WinUI ospitata localmente. |
| L'esecuzione del test termina ma il processo rimane aperto. | Chiudere la finestra di test e richiamare Exit una volta completata l'esecuzione MTP. |
I test non superati restituiscono il codice 0di uscita del processo . |
Assegnare il risultato dell'esecuzione MTP a Environment.ExitCode. |
Un'esecuzione di WinUI senza pacchetto segnala la mancanza di AppxManifest.xml. |
Verificare che il progetto usi MTP anziché VSTest. |
| Un'esecuzione in pacchetto non può registrare o attivare l'app. | Confermare il framework di destinazione di Windows, la Modalità sviluppatore o i criteri di sideloading, l'architettura e la voce dell'eseguibile nel manifesto. |
| Un host AppContainer non può connettersi al controller. | Usare MSTest 4.5 e MTP 2.5 o versione successiva ed eseguire il controller senza privilegi elevati. |
| Un rapporto AppContainer non viene copiato nella directory richiesta. | Usare InvokeTestingPlatform e specificare una directory assoluta per i risultati. |