Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Gunakan Microsoft. Testing.Platform (MTP) untuk menjalankan pengujian MSTest di dalam aplikasi WinUI 3. Aplikasi WinUI bertindak sebagai host pengujian. Ini memiliki titik masuk aplikasi, utas UI, dan masa pakai proses.
Pilih antara dua model penyebaran WinUI 3:
- Aplikasi yang tidak dikemas berjalan sebagai Windows reguler yang dapat dieksekusi.
-
Aplikasi kepercayaan penuh yang dipaketkan menyimpan identitas paket MSIX dan menggunakan ekstensi eksperimental
Microsoft.Testing.Extensions.PackagedAppuntuk mendaftar dan mengaktifkan host pengujian.
Important
Ekstensi aplikasi paket mendukung aplikasi desktop paket kepercayaan penuh. Ini tidak mendukung UWP atau host pengujian AppContainer lainnya.
Aktivasi AUMID kepercayaan penuh paket diimplementasikan di microsoft/testfx repositori tetapi tidak tersedia dalam paket NuGet publik per 6 Agustus 2026. Paket saat ini 1.0.0-alpha tidak berisi implementasi aktivasi khusus Windows. Gunakan penyiapan paket hanya setelah rilis paket mengidentifikasi dukungan untuk pendaftaran MSIX kepercayaan penuh dan aktivasi AUMID.
Memilih model penyebaran
Pilih model penyebaran sebelum Anda mengonfigurasi proyek pengujian.
| Persyaratan | Pilih | Uji startup host |
|---|---|---|
| Pengujian Anda tidak memerlukan identitas paket atau API yang memerlukan identitas paket. | Unpackaged | MTP memulai aplikasi yang dapat dieksekusi secara langsung. |
| Pengujian Anda memerlukan identitas paket MSIX atau perilaku aplikasi paket. | Kepercayaan penuh yang dipaketkan setelah pratinjau MTP tersedia untuk umum | Ekstensi aplikasi paket mendaftarkan output build dan mengaktifkan aplikasi berdasarkan ID Model Pengguna Aplikasi (AUMID). |
| Pengujian Anda harus berjalan di UWP atau AppContainer lainnya. | VSTest | Ekstensi aplikasi paket MTP tidak mendukung isolasi AppContainer. |
Kecuali pengujian Anda memerlukan identitas paket, gunakan aplikasi yang tidak dikemas. Model yang tidak dikemas tidak memerlukan pendaftaran paket, Mode Pengembang, atau ekstensi aplikasi paket eksperimental.
Hingga pratinjau MTP publik mencakup pendaftaran MSIX kepercayaan penuh dan aktivasi AUMID, gunakan VSTest untuk pengujian WinUI 3 kepercayaan penuh yang dikemas.
Memahami batas UWP
Jangan perlakukan UWP sebagai model WinUI 3 paket lainnya. Kedua proyek UWP klasik yang menargetkan proyek UAP 10 dan modern .NET UWP yang diatur UseUwp untuk true berjalan di AppContainer. Mengemas aplikasi desktop WinUI 3 tidak menempatkannya di model aplikasi tersebut.
Gunakan VSTest untuk UWP klasik dan tes UWP .NET modern. Peluncur aplikasi paket MTP menargetkan host desktop paket kepercayaan penuh. Ini tidak dapat mengirimkan argumen aktivasi atau koneksi pengontrolnya ke host AppContainer.
Untuk konfigurasi UWP .NET modern, lihat sampel MSTest .NET 9 UWP.
Mengonfigurasi host uji WinUI
Kedua model penyebaran menggunakan penyiapan MTP yang dihost sendiri yang sama.
Mengatur properti proyek umum
Atur properti ini dalam proyek pengujian WinUI:
<OutputType>Exe</OutputType>
<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
<UseWinUI>true</UseWinUI>
<EnableMSTestRunner>true</EnableMSTestRunner>
<GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>
Gunakan .NET 8 atau versi .NET yang didukung yang lebih baru. Contoh menargetkan versi 10.0.19041.0platform Windows . Ekstensi aplikasi paket memerlukan versi ini atau yang lebih baru.
Simpan item WinUI ApplicationDefinition yang menunjuk ke file XAML aplikasi pengujian Anda. WinUI menghasilkan titik masuk dari item tersebut. Untuk mencegah MTP menghasilkan titik masuk kedua, atur GenerateTestingPlatformEntryPoint ke false.
Tambahkan referensi paket ke versi MSTest dan Microsoft yang kompatibel saat ini. WindowsAppSDK.
Host MTP dari aplikasi
Ambil alih OnLaunched di kelas WinUI Application . Buat dan aktifkan jendela pengujian, lalu terbitkan antrean dispatcher-nya:
_window = new UnitTestAppWindow();
_window.Activate();
UITestMethodAttribute.DispatcherQueue = _window.DispatcherQueue;
Tambahkan using Microsoft.VisualStudio.TestTools.UnitTesting.AppContainer; untuk UITestMethodAttribute.
Buat aplikasi MTP dari argumen baris perintah. Kemudian daftarkan ekstensi yang dikontribusikan MSBuild:
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();
Tambahkan using Microsoft.Testing.Platform.Builder; untuk jenis penyusun MTP. Build WinUI menambahkan EnableMSTestRunner ke argumen proses. Karena ini bukan opsi baris perintah MTP, hapus sebelum Anda membuat aplikasi pengujian.
Proyek menonaktifkan titik masuk MTP yang dihasilkan, jadi panggil AddSelfRegisteredExtensions. Untuk aplikasi paket, metode ini juga mendaftarkan Microsoft.Testing.Extensions.PackagedApp peluncur.
Dalam OnLaunched, letakkan pembuatan dan eksekusi aplikasi pengujian dalam try blok. Tetapkan hasil ke await app.RunAsync()Environment.ExitCode.
finally Dalam blok, tutup jendela dan panggil metode aplikasiExit.
Langkah siklus hidup memberikan dua jaminan:
- Proses mengembalikan kode keluar MTP, sehingga pengujian yang gagal menghasilkan kode keluar proses nonzero.
- Perulangan pesan WinUI berhenti setelah eksekusi alih-alih membiarkan proses pengujian aktif.
Warning
Jangan tambahkan [assembly: WinUITestTarget(...)] ke aplikasi uji WinUI yang dihost sendiri. Atribut memulai aplikasi WinUI untuk host pengujian terpisah. Aplikasi yang dihost sendiri memanggil Application.Start terlebih dahulu. Atribut kemudian mencoba memulai aplikasi kedua dalam proses yang sama.
Untuk implementasi lengkap, lihat sampel WinUI yang belum dikemas dan sampel WinUI yang dikemas.
Menjalankan pengujian pada utas UI
Gunakan UITestMethod untuk pengujian yang membuat atau mengakses objek WinUI. MSTest menjadwalkan pengujian pada antrean dispatcher yang Anda tetapkan selama OnLaunched.
[UITestMethod]
public void CreatesControlOnUiThread()
{
var grid = new Grid();
Assert.IsTrue(grid.DispatcherQueue.HasThreadAccess);
}
Reguler TestMethod tidak berjalan pada antrean dispatcher WinUI. Gunakan untuk pengujian yang tidak memerlukan utas UI.
Mengonfigurasi aplikasi pengujian yang tidak dikemas
Untuk aplikasi yang tidak dikemas, tambahkan properti ini:
<WindowsPackageType>None</WindowsPackageType>
<EnableMsixTooling>false</EnableMsixTooling>
Jangan referensikan Microsoft.Testing.Extensions.PackagedApp. Aplikasi yang tidak dikemas tidak memiliki identitas MSIX atau AppxManifest.xml dalam outputnya, sehingga MTP dapat memulai executable secara langsung.
Secara default, SDK Aplikasi Windows menyuntikkan penginisialisasi bootstrap ketika proyek memenuhi kondisi ini:
-
WindowsPackageTypeadalahNone. -
OutputTypeadalahExeatauWinExe. -
WindowsAppSDKSelfContainedbukantrue.
Jika host yang bukan aplikasi SDK Aplikasi Windows memuat pustaka pengujian Anda, atur WindowsAppSdkBootstrapInitialize ke true di pustaka.
Note
VSTest tidak mendukung konfigurasi WinUI yang tidak dikemas ini. Jalankan proyek dengan MTP.
Mengonfigurasi aplikasi uji kepercayaan penuh yang dipaketkan
Pertahankan konfigurasi WinUI paket default:
- Jangan atur
WindowsPackageTypekeNone. - Simpan
Package.appxmanifestdan aset paket dalam proyek. - Atur
EnableMsixToolingketruejika proyek Anda menggunakan alat pengemasan MSIX proyek tunggal.
Setelah pratinjau yang menyertakan pendaftaran MSIX kepercayaan penuh dan aktivasi AUMID tersedia, tambahkan versi Microsoft tertentu tersebut. Paket Testing.Extensions.PackagedApp. Jangan gunakan paket sebelumnya 1.0.0-alpha untuk penyetelan ini.
Alat peraga MSBuild paket mendaftarkan peluncur melalui AddSelfRegisteredExtensions. Jangan juga memanggil AddPackagedAppDeployment. Eksekusi MTP hanya dapat mendaftarkan satu peluncur host pengujian.
Peluncur melakukan tindakan ini:
- Ini memeriksa yang
AppxManifest.xmlmenjelaskan pengujian yang dapat dieksekusi. - Ini mendaftarkan tata letak build-output dengan Windows.
- Ini menyelesaikan AUMID aplikasi dari paket terdaftar dan ID aplikasi manifes.
- Ini mengaktifkan aplikasi oleh AUMID dan menghubungkan proses yang diaktifkan ke pengontrol MTP.
Peluncur mengabaikan manifes yang tidak terkait dalam direktori leluhur kecuali entri Application menunjuk ke pengujian yang dapat dieksekusi. Aplikasi yang tidak dikemas yang mereferensikan paket secara tidak langsung tetap berada di jalur mulai langsung.
Penuhi persyaratan ini sebelum Anda menjalankan aplikasi pengujian paket:
- Gunakan kerangka kerja target khusus Windows dengan versi platform atau yang lebih
10.0.19041.0baru. - Untuk mendaftarkan tata letak build-output yang tidak ditandatangani, aktifkan Mode Pengembang atau konfigurasikan sideloading.
- Gunakan aplikasi desktop paket kepercayaan penuh. Ekstensi tidak mendukung UWP atau host AppContainer lainnya.
Caution
Microsoft.Testing.Extensions.PackagedApp
ITestHostLauncher dan titik ekstensi bersifat eksperimental. Rilis mendatang dapat mengubah atau menghapus API dan perilaku mereka. Evaluasi risiko sebelum Anda menggunakan model yang dipaketkan dalam infrastruktur pengujian produksi.
Jalankan pengujian
Dari direktori yang berisi proyek pengujian WinUI, jalankan:
dotnet run
Untuk menentukan proyek, gunakan dotnet run --project .\WinUITests.csproj.
Untuk aplikasi yang tidak dikemas, MTP memulai executable secara langsung. Untuk aplikasi paket, peluncur aplikasi paket mendaftarkan tata letak dan mengaktifkan aplikasi oleh AUMID.
Di kedua model, jendela pengujian terbuka, MTP menjalankan pengujian, dan jendela ditutup. Terminal kemudian melaporkan ringkasan pengujian. Eksekusi berhasil keluar dengan kode 0. Ketika pengujian gagal, OnLaunched menetapkan hasil nonzero RunAsync ke Environment.ExitCode.
Gunakan dotnet run untuk salah satu model. Untuk menjalankan aplikasi yang tidak dikemas secara langsung, gunakan aplikasi yang dihasilkan yang dapat dieksekusi. Jangan gunakan dotnet exec karena WinUI menyelesaikan sumber daya PRI relatif terhadap jalur proses.
Memecahkan masalah penyiapan
Gunakan pemeriksaan ini untuk kegagalan penyiapan yang paling umum:
| Gejala | Periksa |
|---|---|
Aplikasi melaporkan beberapa panggilan ke Application.Start. |
WinUITestTarget Hapus atribut dari aplikasi pengujian yang dihost sendiri. |
| Eksekusi pengujian selesai tetapi proses tetap terbuka. | Tutup jendela pengujian dan panggil Exit dalam finally blok setelah RunAsync. |
Pengujian yang gagal masih mengembalikan kode 0keluar proses . |
Tetapkan hasil ke RunAsyncEnvironment.ExitCode. |
Eksekusi yang tidak dikemas gagal karena AppxManifest.xml hilang. |
Konfirmasikan bahwa proyek mengaktifkan MTP dan bahwa eksekusi tidak menggunakan VSTest. |
| Eksekusi paket tidak dapat mendaftar atau mengaktifkan aplikasi. | Konfirmasikan kerangka kerja target khusus Windows, Mode Pengembang atau konfigurasi sideloading, model aplikasi kepercayaan penuh, dan entri manifes yang dapat dieksekusi. |