Uji aplikasi UWP dan WinUI 3 dengan MSTest dan Microsoft. Testing.Platform

Gunakan Microsoft. Testing.Platform (MTP) untuk menjalankan pengujian MSTest di dalam aplikasi UWP dan WinUI 3. Aplikasi ini bertindak sebagai host pengujian dan memiliki utas UI dan masa pakai prosesnya.

Important

Matriks dukungan aplikasi Windows lengkap yang dijelaskan dalam artikel ini tersedia dengan MSTest 4.5 dan MTP 2.5. Hingga versi stabil dirilis, gunakan paket pratinjau 4.5 dan 2.5 yang cocok. Jika Anda mengelola paket MTP secara langsung, jaga agar versi platform dan paket ekstensi tetap selaras.

Memilih model aplikasi

MSTest.Sdk mendukung model aplikasi Windows berikut melalui MTP:

Model aplikasi Pengemasan dan kepercayaan Uji mulai host Jalankan perintah
UWP Klasik (uap10.0) AppContainer yang Dipaketkan Sidecar dengan kepercayaan penuh mendaftarkan sebuah paket dan mengaktifkan aplikasi menggunakan ID Model Pengguna Aplikasi (AUMID). MSBuild dengan target InvokeTestingPlatform
UWP modern (.NET 10 dengan UseUwp) AppContainer yang dipaketkan Sidecar dengan kepercayaan penuh mendaftarkan paket dan mengaktifkan aplikasi menggunakan AUMID. MSBuild dengan target InvokeTestingPlatform
WinUI 3 yang dipaketkan Kepercayaan penuh dalam paket Sidecar kepercayaan penuh mendaftarkan paket dan mengaktifkan aplikasi oleh AUMID. dotnet run atau dotnet test --project
WinUI 3 Yang Tidak Dipaketkan Tidak ada identitas paket, kepercayaan penuh MTP memulai aplikasi yang dapat dieksekusi secara langsung. dotnet run atau dotnet test --project
WinUI 3 packagedClassicApp dengan TrustLevel="appContainer" AppContainer yang dipaketkan Sidecar tepercaya penuh mengaktifkan aplikasi dan mengotorisasi pengidentifikasi keamanan paket (SID) yang tepat pada saluran komunikasi MTP. dotnet msbuild dengan target InvokeTestingPlatform

Pengemasan dan sandboxing adalah pilihan terpisah. Aplikasi desktop WinUI 3 yang dipaketkan memiliki identitas paket tetapi berjalan sebagai proses kepercayaan penuh secara default. Aplikasi UWP selalu berjalan di AppContainer. Aplikasi WinUI 3 yang dikemas berjalan di AppContainer hanya saat manifesnya ditetapkan TrustLevel="appContainer".

Untuk versi MSTest atau MTP yang lebih lama, pertahankan konfigurasi VSTest yang ada untuk proyek UWP. Eksekusi MTP asli untuk host UWP dan AppContainer memerlukan MSTest 4.5 dan MTP 2.5.

Memahami sidecar model aplikasi MTP

Untuk aplikasi yang dipaketkan, proses alat pengujian awal tidak dapat berjalan di dalam paket. MSTest.Sdk memulai pengontrol sidecar berkepercayaan penuh yang:

  • Menyiapkan argumen baris perintah dan memiliki pembatalan, percobaan ulang, laporan, dan penanganan kode keluar.
  • Mendaftarkan paket keluaran build dan mengaktifkan aplikasi manifes yang sesuai berdasarkan AUMID.
  • Hanya mengotorisasi SID paket yang dipilih saat host AppContainer tersambung ke MTP bernama pipes.
  • Memulihkan artefak TRX, dump, diagnostik, dan percobaan ulang dari penyimpanan yang dimiliki paket.

Aplikasi pengujian masih menghosting MTP dan MSTest dalam prosesnya sendiri. Eksekusi UWP tidak memerlukan Microsoft.NET.Test.Sdk, vstest.console, UwpTestHostRuntimeProvider, atau runtime deployment Visual Studio.

Untuk UWP windowsApp, Windows menyediakan satu string aktivasi melalui LaunchActivatedEventArgs.Arguments alih-alih argumen proses normal. Hubungi PackagedAppExtensions.GetTestApplicationArguments sebelum Anda membuat pembuat MTP. Ekstensi packaged-app memulihkan larik argumen asli dan metadata koneksi kontroler.

Untuk WinUI 3 packagedClassicApp, termasuk yang berjalan di AppContainer, gunakan argumen proses normal.

Memenuhi prasyarat

Gunakan prasyarat yang berlaku untuk proyek Anda:

  • Gunakan .NET SDK 10 atau yang lebih baru untuk toolchain MSTest 4.5 dan dotnet test --project.
  • Untuk UWP, gunakan MSBuild desktop dari Visual Studio dengan beban kerja Platform Windows Universal dan SDK Windows yang diperlukan. Komponen-komponen ini hanya menyediakan dukungan saat proses build.
  • Untuk WinUI 3, instal alat pengembangan aplikasi Windows dan referensikan versi SDK Aplikasi Windows yang kompatibel.
  • Untuk aplikasi uji yang dipaketkan, aktifkan Mode Pengembang Windows atau konfigurasikan sideloading agar Windows dapat meregistrasikan tata letak output build yang tidak ditandatangani.
  • Untuk aplikasi uji AppContainer, jalankan kontroler sebagai pengguna tanpa hak administrator.

Konfigurasikan pengujian UWP

Konfigurasikan proyek UWP modern

Gunakan MSTest.Sdk 4.5 atau yang lebih baru, targetkan .NET 10 dengan versi platform Windows, dan atur UseUwp ke true. Pertahankan pengaturan UWP XAML, MSIX, arsitektur, dan AOT Asli yang ada.

Visual Studio biasanya mengaktifkan UseUwpTools selama proses build. MSTest.Sdk memilih model aplikasi UWP saat UseUwpTools adalah true, atau ketika UseUwp adalah true dan UseUwpTools belum ditetapkan.

Jika Anda hanya memerlukan referensi UWP dalam aplikasi pengujian MTP non-UWP, atur UseUwpTools ke false. SDK tersebut kemudian menggunakan runner MTP langsung kecuali model aplikasi terpaket lain memerlukan sidecar.

Untuk proyek lengkap, lihat sampel MTP UWP modern.

Konfigurasikan proyek UWP klasik

Pertahankan uap10.0 struktur proyek yang ada, toolchain desktop MSBuild, dan SDK ekstensi UWP. Impor MSTest.Sdk 4.5 atau yang lebih baru, dan aktifkan MSTest runner dan MTP. MSTest.Sdk memasok aset bootstrap, adaptor, dan runtime yang kompatibel dengan UAP.

Untuk proyek lengkap, lihat sampel MTP UWP klasik.

Menjalankan pengujian UWP

Buka Pengembang PowerShell untuk Visual Studio. Bangun solusi untuk arsitektur konkret, lalu panggil 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"

Perintah kedua mendaftarkan paket, mengaktifkan aplikasi menggunakan AUMID, menjalankan pengujian biasa dan pengujian pada thread UI, menyalin artefak hasil dari penyimpanan paket, dan mengembalikan kode keluar eksekusi pengujian.

Konfigurasikan pengujian WinUI 3

Gunakan MSTest.Sdk 4.5 atau yang lebih baru, atur UseWinUI ke true, dan targetkan kerangka kerja target khusus Windows. Untuk aktivasi terpaket, gunakan Windows platform versi 10.0.19041.0 atau yang lebih baru.

Meng-host MTP dari aplikasi WinUI

Untuk aplikasi uji WinUI yang dihost sendiri, buat dan aktifkan jendela pengujian di OnLaunched, lalu terbitkan antrean dispatcher-nya:

_window = new UnitTestAppWindow();
_window.Activate();
UITestMethodAttribute.DispatcherQueue = _window.DispatcherQueue;

Jalankan pembantu MTP yang dihasilkan, tetapkan hasilnya ke Environment.ExitCode, tutup jendela, dan panggil Exit:

Environment.ExitCode = await MicrosoftTestingPlatformApplication.RunAsync(
    Environment.GetCommandLineArgs()[1..]);

Gunakan UITestMethod untuk pengujian yang membuat atau mengakses objek WinUI. Gunakan TestMethod untuk pengujian yang tidak memerlukan utas UI.

Warning

Jangan tambahkan [assembly: WinUITestTarget(...)] ke aplikasi uji WinUI yang dihost sendiri. Atribut itu memulai aplikasi WinUI untuk host pengujian terpisah, tetapi aplikasi yang dihost sendiri telah memanggil Application.Start.

Konfigurasikan aplikasi tanpa paket

Atur WindowsPackageType ke None. Aplikasi ini tidak memiliki identitas MSIX atau AppxManifest.xml, sehingga MTP memulai eksekusinya secara langsung. Jangan tambahkan ekstensi aplikasi yang dipaketkan secara manual.

SDK Aplikasi Windows biasanya menyuntikkan penginisialisasi bootstrap ketika proyek memenuhi kondisi ini:

  • WindowsPackageType adalah None.
  • OutputType adalah Exe atau WinExe.
  • WindowsAppSDKSelfContained bukan true.

Jika host yang bukan merupakan aplikasi SDK Aplikasi Windows memuat pustaka pengujian Anda, atur WindowsAppSdkBootstrapInitialize menjadi true di pustaka tersebut.

VSTest tidak mendukung aplikasi uji WinUI 3 yang tidak dikemas karena penyedia WinUI-nya memerlukan manifes AppX.

Untuk proyek lengkap, lihat sampel MTP WinUI yang belum dikemas.

Mengonfigurasi aplikasi kepercayaan penuh yang dipaketkan

Pertahankan konfigurasi WinUI terkemas bawaan beserta Package.appxmanifest-nya. MSTest.Sdk mereferensikan dan mendaftar Microsoft.Testing.Extensions.PackagedApp secara otomatis untuk proyek yang dikemas.

Jangan panggil AddPackagedAppDeployment juga. Proses MTP hanya dapat mendaftarkan satu peluncur host uji. Atur EnableMicrosoftTestingExtensionsPackagedApp ke false hanya saat peluncur kustom memiliki aktivasi paket.

Untuk proyek lengkap, lihat contoh MTP WinUI yang dipaketkan.

Mengonfigurasi aplikasi AppContainer

Dalam manifes paket WinUI, konfigurasikan aplikasi sebagai packagedClassicApp dan atur TrustLevel="appContainer". MTP 2.5 mengotorisasi SID paket yang tepat pada pengontrol dan pipa ekstensi. Ini tidak memberikan ALL APPLICATION PACKAGES atau memerlukan pengecualian loopback.

Jalankan sidecar yang tidak ditingkatkan. Gunakan target InvokeTestingPlatform agar sidecar dapat menyalin hasil dan data diagnostik dari paket LocalState ke direktori hasil yang diminta.

Untuk proyek lengkap, lihat sampel MTP AppContainer WinUI.

Menjalankan pengujian WinUI 3

Rancang untuk arsitektur tertentu. Untuk aplikasi yang dikemas dengan kepercayaan penuh atau tidak dikemas, jalankan:

dotnet build -p:Platform=x64
dotnet test --project . --no-build -p:Platform=x64

Anda juga dapat menggunakan dotnet run --no-build -p:Platform=x64.

Untuk aplikasi AppContainer WinUI, gunakan target sidecar dan direktori hasil absolut:

dotnet msbuild .\WinUITests.csproj -t:InvokeTestingPlatform -p:Platform=x64 "-p:TestingPlatformCommandLineArguments=--report-trx --results-directory C:\TestResults"

Jangan gunakan dotnet exec untuk aplikasi WinUI. WinUI menentukan sumber daya PRI berdasarkan jalur proses.

Mengatasi masalah penyiapan

Gejala Periksa
Aplikasi melaporkan beberapa panggilan ke Application.Start. WinUITestTarget Hapus atribut dari aplikasi uji WinUI yang dihost sendiri.
Pengujian selesai, tetapi proses tetap berjalan. Tutup jendela pengujian dan panggil Exit setelah eksekusi MTP selesai.
Tes yang gagal mengembalikan kode keluar proses 0. Tetapkan hasil eksekusi MTP ke Environment.ExitCode.
Menjalankan aplikasi WinUI tanpa paket melaporkan bahwa AppxManifest.xml tidak ada. Konfirmasikan bahwa proyek menggunakan MTP alih-alih VSTest.
Paket yang dijalankan tidak dapat meregistrasikan atau mengaktifkan aplikasi. Konfirmasikan kerangka kerja target Windows, Mode Pengembang atau kebijakan sideloading, arsitektur, dan entri manifes yang dapat dieksekusi.
Host AppContainer tidak dapat tersambung ke pengontrol. Gunakan MSTest 4.5 dan MTP 2.5 atau yang lebih baru, dan jalankan pengontrol yang tidak ditingkatkan.
Laporan AppContainer tidak disalin ke direktori yang diminta. Gunakan InvokeTestingPlatform dan tentukan direktori hasil absolut.

Baca juga