Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
UWP ve WinUI 3 uygulamalarında MSTest testlerini çalıştırmak için Microsoft.Testing.Platform'u (MTP) kullanın. Uygulama, test ana bilgisayarı olarak görev yapar ve kullanıcı arabirimi iş parçacığını ve işlemin yaşam döngüsünü yönetir.
Important
Bu makalede açıklanan tam Windows uygulama destek matrisi MSTest 4.5 ve MTP 2.5 ile kullanılabilir. Kararlı sürümler kullanıma sunulana kadar eşleşen 4.5 ve 2.5 önizleme paketlerini kullanın. MTP paketlerini doğrudan yönetiyorsanız, platform ve uzantı paketi sürümlerini uyumlu tutun.
Uygulama modeli seçme
MSTest.Sdk, MTP aracılığıyla aşağıdaki Windows uygulama modellerini destekler:
| Uygulama modeli | Paketleme ve güven | Test ana bilgisayarının başlatılması | Komut çalıştırma |
|---|---|---|---|
Klasik UWP (uap10.0) |
Paketlenmiş AppContainer | Tam güvenilir sidecar, paketi kaydeder ve uygulamayı Uygulama Kullanıcı Modeli Kimliği (AUMID) ile etkinleştirir. |
MSBuild
InvokeTestingPlatform hedefiyle |
Modern UWP (.NET 10 ile UseUwp) |
Paketlenmiş AppContainer | Tam güvenli bir sidecar, paketi kaydeder ve uygulamayı AUMID aracılığıyla etkinleştirir. |
MSBuild
InvokeTestingPlatform hedefiyle |
| Paketlenmiş WinUI 3 | Paketlenmiş tam güven | Tam güvenilir bir yardımcı uygulama, paketi kaydeder ve uygulamayı AUMID kullanarak etkinleştirir. |
dotnet run veya dotnet test --project |
| Paketlenmemiş WinUI 3 | Paket kimliği yok, tam güven | MTP, uygulamanın yürütülebilir dosyasını doğrudan başlatır. |
dotnet run veya dotnet test --project |
WinUI 3 packagedClassicApp ile TrustLevel="appContainer" |
Paketlenmiş AppContainer | Tam güvenilir yardımcı bileşen, uygulamayı etkinleştirir ve MTP iletişim kanallarında uygulamanın tam paket güvenlik tanımlayıcısını (SID) yetkilendirir. |
dotnet msbuild, InvokeTestingPlatform hedefiyle |
Paketleme ve korumalı alan kullanımı birbirinden bağımsız seçeneklerdir. Paketlenmiş bir WinUI 3 masaüstü uygulaması paket kimliğine sahiptir ancak varsayılan olarak tam güven işlemi olarak çalışır. UWP uygulaması her zaman AppContainer'da çalışır. Paketlenmiş bir WinUI 3 uygulaması, yalnızca manifestinde TrustLevel="appContainer" ayarlandığında AppContainer içinde çalışır.
Eski MSTest veya MTP sürümleri için, UWP projeleri için var olan VSTest yapılandırmanızı koruyun. UWP ve AppContainer konakları için yerel MTP yürütmesi için MSTest 4.5 ve MTP 2.5 gerekir.
MTP uygulama modeli sidecar’ını anlama
Paketlenmiş bir uygulama için ilk test aracı işlemi paketin içinde çalıştırılamaz. MSTest.Sdk, şunları yapan tam yetkili bir yardımcı denetleyici başlatır:
- Komut satırı bağımsız değişkenlerini hazırlar; iptal, yeniden deneme, raporlama ve çıkış kodu işlemeyi yönetir.
- Derleme-çıkış paketini kaydeder ve AUMID tarafından tam bildirim uygulamasını etkinleştirir.
- Bir AppContainer ana bilgisayarı MTP adlı kanallarına bağlandığında yalnızca seçili paket SID'sini yetkilendirir.
- TRX, döküm, tanılama ve yeniden deneme yapıtlarını pakete ait depolama alanından kurtarır.
Test uygulaması MTP ve MSTest'i kendi işleminde barındırmaya devam eder. UWP yürütmesi için vstest.console, UwpTestHostRuntimeProvider, Microsoft.NET.Test.Sdk veya Visual Studio dağıtım çalışma zamanı gerekmez.
Bir UWP windowsApp için Windows, normal işlem argümanları yerine LaunchActivatedEventArgs.Arguments aracılığıyla tek bir etkinleştirme dizesi sağlar. MTP oluşturucusunu oluşturmadan önce çağırın PackagedAppExtensions.GetTestApplicationArguments . Paketlenmiş uygulama uzantısı, özgün bağımsız değişken dizisini ve denetleyici bağlantısı meta verilerini geri yükler.
Bir WinUI 3 packagedClassicApp için, AppContainer’da çalışanlar dahil, normal işlem argümanlarını kullanın.
Önkoşulları karşılama
Projenize uygulanan önkoşulları kullanın:
- MSTest 4.5 araç zinciri ve
dotnet test --projectiçin .NET SDK 10 veya üzerini kullanın. - UWP için, Evrensel Windows Platformu iş yükü ve gerekli Windows SDK'sı ile Visual Studio desktop MSBuild kullanın. Bu bileşenler yalnızca derleme zamanı desteği sağlar.
- WinUI 3 için Windows uygulama geliştirme araçlarını yükleyin ve uyumlu bir Windows Uygulama SDK'sı sürümüne başvurun.
- Paketlenmiş test uygulamalarında, Windows Geliştirici Modu'nu etkinleştirin veya Windows'un imzasız bir derleme çıktısı düzenini kaydedebilmesi için yandan yüklemeyi yapılandırın.
- AppContainer test uygulamaları için denetleyiciyi yükseltilmiş olmayan bir kullanıcı olarak çalıştırın.
UWP testlerini yapılandırma
Modern bir UWP projesi yapılandırma
MSTest.Sdk 4.5 veya sonraki bir sürümü kullanın, Windows platform sürümüne sahip .NET 10'u hedefleyin ve true öğesini UseUwp olarak ayarlayın. Mevcut UWP XAML, MSIX, mimari ve Yerel AOT ayarlarınızı koruyun.
Visual Studio normalde derleme sırasında etkinleştirirUseUwpTools. MSTest.Sdk, UseUwpToolstrue olduğunda veya UseUwpToolsUseUwp olduğunda ve true henüz ayarlanmamışsa UWP uygulama modelini seçer.
UWP olmayan bir MTP test uygulamasında yalnızca UWP başvurularına ihtiyacınız varsa, UseUwpTools öğesini false olarak ayarlayın. Sdk daha sonra başka bir paketlenmiş uygulama modeli sepet gerektirmediği sürece doğrudan MTP çalıştırıcısını kullanır.
Eksiksiz bir proje için bkz. modern UWP MTP örneği.
Klasik UWP projelerini yapılandırma
Mevcut uap10.0 proje şeklini, masaüstü MSBuild araç zincirini ve UWP uzantısı SDK'sını koruyun. MSTest.Sdk 4.5 veya üzerini içeri aktarın ve MSTest çalıştırıcısını ve MTP'yi etkinleştirin. MSTest.Sdk, UAP ile uyumlu önyükleme, bağdaştırıcı ve çalışma zamanı bileşenlerini sunar.
Projenin tamamı için bkz. klasik UWP MTP örneği.
UWP testleri çalıştırma
Visual Studio için bir Geliştirici PowerShell'i açın. Somut bir mimari için çözümü derleyin ve ardından MTP'yi çağırın:
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"
İkinci komut paketi kaydeder, uygulamayı AUMID ile etkinleştirir, normal ve UI iş parçacığı testleri çalıştırır, sonuç yapıtlarını paket depolama alanından kopyalar ve test çalıştırması çıkış kodunu döndürür.
WinUI 3 testlerini yapılandırma
MSTest.Sdk 4.5 veya sonraki bir sürümü kullanın, true değerini UseWinUI olarak ayarlayın ve Windows’a özgü bir hedef çerçeveyi hedefleyin. Paketlenmiş etkinleştirme için Windows platform sürümünü veya sonraki bir sürümü 10.0.19041.0 kullanın.
WinUI uygulamasından MTP barındırma
Kendinden barındırılan bir WinUI test uygulaması için, test penceresini OnLaunched içinde oluşturup etkinleştirin ve ardından onun dağıtıcı kuyruğunu yayımlayın:
_window = new UnitTestAppWindow();
_window.Activate();
UITestMethodAttribute.DispatcherQueue = _window.DispatcherQueue;
Oluşturulan MTP yardımcısını çalıştırın, sonucunu Environment.ExitCode öğesine atayın, pencereyi kapatın ve Exit öğesini çağırın:
Environment.ExitCode = await MicrosoftTestingPlatformApplication.RunAsync(
Environment.GetCommandLineArgs()[1..]);
WinUI nesneleri oluşturan veya bu nesnelere erişen testler için kullanın UITestMethod . Kullanıcı arabirimi iş parçacığı gerektirmeyen testler için TestMethod kullanın.
Warning
Kendinden barındırılan bir WinUI test uygulamasına [assembly: WinUITestTarget(...)] eklemeyin. Bu öznitelik, ayrı bir test ana bilgisayarı için bir WinUI uygulaması başlatır, ancak kendi kendini barındıran uygulama Application.Start öğesini zaten çağırmıştır.
Paketlenmemiş bir uygulamayı yapılandırma
WindowsPackageType değerini None olarak ayarlayın. Uygulamanın MSIX kimliği ya da AppxManifest.xml yoktur, bu nedenle MTP, yürütülebilir dosyasını doğrudan başlatır. Paketlenmiş uygulama uzantısını el ile eklemeyin.
proje şu koşulları karşıladığında Windows Uygulama SDK'sı normalde bootstrap başlatıcısını eklir:
-
WindowsPackageType,None'e eşittir. -
OutputTypeveyaExeşeklindedirWinExe. -
WindowsAppSDKSelfContained,truedeğildir.
Windows Uygulama SDK'sı uygulaması olmayan bir konak test kitaplığınızı yüklüyorsa, kitaplıkta WindowsAppSdkBootstrapInitialize değerini true olarak ayarlayın.
WINUI sağlayıcısı bir AppX bildirimi gerektirdiğinden VSTest paketlenmemiş WinUI 3 test uygulamalarını desteklemez.
Eksiksiz bir proje için paketlenmemiş WinUI MTP örneğine bakın.
Paketlenmiş tam güven uygulamasını yapılandırma
Varsayılan paketlenmiş WinUI yapılandırmasını ve ilgili Package.appxmanifest ögesini koruyun. MSTest.Sdk, paketlenmiş projeye otomatik olarak başvurur ve kaydeder Microsoft.Testing.Extensions.PackagedApp .
AddPackagedAppDeployment öğesini de çağırmayın. Bir MTP çalıştırma işlemi yalnızca bir test ana bilgisayarı başlatıcısı kaydedebilir. Yalnızca özel bir başlatıcı paketlenmiş etkinleştirmeyi üstleniyorsa false değerini EnableMicrosoftTestingExtensionsPackagedApp olarak ayarlayın.
Eksiksiz bir proje için paketlenmiş WinUI MTP örneğine bakın.
AppContainer uygulamasını yapılandırma
WinUI paket bildiriminde, uygulamayı packagedClassicApp olarak yapılandırın ve TrustLevel="appContainer" ayarını yapın. MTP 2.5, denetleyici ve uzantı borularında tam paket SID'sini yetkiler.
ALL APPLICATION PACKAGES sağlamaz veya geri döngü muafiyeti gerektirmez.
Sidecar’ı yönetici ayrıcalıkları olmadan çalıştırın. Sidecar’ın sonuçları ve tanılama bilgilerini LocalState paketinden istenen sonuçlar dizinine kopyalayabilmesi için InvokeTestingPlatform hedefini kullanın.
Eksiksiz bir proje için bkz. AppContainer WinUI MTP örneği.
WinUI 3 testleri çalıştırma
Belirli bir mimariyi hedefleyin. Paketlenmiş tam güven veya paketlenmemiş bir uygulama için şunu çalıştırın:
dotnet build -p:Platform=x64
dotnet test --project . --no-build -p:Platform=x64
komutunu da kullanabilirsiniz dotnet run --no-build -p:Platform=x64.
Bir AppContainer WinUI uygulamasında, sidecar hedefini ve mutlak bir sonuç dizinini kullanın:
dotnet msbuild .\WinUITests.csproj -t:InvokeTestingPlatform -p:Platform=x64 "-p:TestingPlatformCommandLineArguments=--report-trx --results-directory C:\TestResults"
WinUI uygulaması için kullanmayın dotnet exec . WinUI, PRI kaynaklarını işlem yoluna göre çözümler.
Kurulumdaki sorunları giderin
| Belirti | Kontrol |
|---|---|
Uygulama, Application.Start öğesine birden çok çağrı bildiriyor. |
Kendi kendini barındıran bir WinUI test uygulamasından WinUITestTarget özniteliğini kaldırın. |
| Test çalıştırması tamamlanır, ancak işlem açık kalır. | Test penceresini kapatın ve MTP çalıştırması tamamlandıktan sonra çağrısı Exit yapın. |
Başarısız testler işlem çıkış kodunu 0döndürür. |
MTP çalıştırma sonucunu öğesine atayın Environment.ExitCode. |
Paketlenmemiş bir WinUI çalıştırması, AppxManifest.xml öğesinin eksik olduğunu bildirir. |
Projenin VSTest yerine MTP kullandığını onaylayın. |
| Paketlenmiş çalıştırma, uygulamayı kaydedemez veya etkinleştiremez. | Windows hedef çerçevesini, Geliştirici Modu'nu veya yandan yükleme ilkesini, mimariyi ve bildirim dosyasındaki yürütülebilir dosya girdisini doğrulayın. |
| AppContainer konağı denetleyiciye bağlanamıyor. | MSTest 4.5 ve MTP 2.5 veya üzerini kullanın ve denetleyiciyi yükseltilmemiş olarak çalıştırın. |
| AppContainer raporu istenen dizine kopyalanmamış. |
InvokeTestingPlatform kullanın ve mutlak bir sonuç dizini belirtin. |