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.
Bu makalede VSTest'ten Microsoft.Testing.Platform'a nasıl geçiş yapılacağını öğreneceksiniz.
Bu makale, geçiş adımlarına ve argüman eşlemesine odaklanır.
Yine de bir platform seçmeniz gerekiyorsa Test platformlarına genel bakış ile başlayın.
Modların ayrıntılı davranışına ihtiyacınız varsa, dotnet test'ye bakın.
Platform ve uzantı komut satırı seçeneklerinin tek bir listesine ihtiyacınız varsa bkz. Microsoft.Testing.Platform CLI seçenekleri başvurusu.
Microsoft.Testing.Platform'u kullanmayı kabul etme
Geçişin ilk adımı, Microsoft.Testing.Platform'u kullanmayı kabul etmektir.
Tüm test çerçeveleri için çözümdeki tüm test projelerine ekleyin <OutputType>Exe</OutputType> . Bundan sonra çerçeveye özgü yönergeleri izleyin.
MSTest
Microsoft.Testing.Platform, 3.2.0 ile başlayan MSTest tarafından desteklenir. Ancak, en son kullanılabilir MSTest sürümüne güncelleştirmenizi öneririz.
Kabul etmek için, <EnableMSTestRunner>true</EnableMSTestRunner>'yi PropertyGroup altına Directory.Build.props dosyasında ekleyin.
Uyarı
MSTest.Sdk kullanılırken Microsoft.Testing.Platform, belirtilmediği sürece <UseVSTest>true</UseVSTest> varsayılan olarak kullanılır.
NUnit
Microsoft.Testing.Platform, 5.0.0 ile başlayan NUnit3TestAdapter tarafından desteklenir.
Kabul etmek için, <EnableNUnitRunner>true</EnableNUnitRunner>'yi PropertyGroup altına Directory.Build.props dosyasında ekleyin.
xUnit.net
Microsoft.Testing.Platform, xunit.v3 ile başlayarak desteklenir.
Kabul etmek için, <UseMicrosoftTestingPlatformRunner>true</UseMicrosoftTestingPlatformRunner>'yi PropertyGroup altına Directory.Build.props dosyasında ekleyin.
dotnet test
.NET 9 SDK ve önceki sürümler için giriş yap
.NET 9 SDK ve önceki sürümlerde Microsoft.Testing.Platform için yerel destek yoktur. Destek, VSTest altyapısının üzerine kurulmuştur. Bunu kullanmak için <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport> dosyasındaki bir PropertyGroup altına Directory.Build.props ekleyin.
Önemli
Microsoft.Testing.Platform desteğini bu modda çalıştırırken, -- ekleyerek bağımsız değişkenleri yeni platform bağımsız değişkenlerinden ayırmanız dotnet test gerekir. Örneğin, dotnet test --no-build -- --list-tests.
.NET 10 SDK ve üzeri için katılmayı tercih et.
.NET 10 SDK'sı ile başlayarak Microsoft.Testing.Platform için yerel destek sağlanır. Bunu kullanmak için Microsoft.Testing.Platform test çalıştırıcısını global.json'de belirtmeniz gerekir.
{
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
Önemli
Bu modda, ekstra -- artık kullanılmaz.
Çağrıları güncelle dotnet test
komut satırı seçenekleri dotnet test iki kategoriye ayrılır: derlemeyle ilgili bağımsız değişkenler ve testle ilgili olanlar.
Derlemeyle ilgili parametreler test platformuyla ilgili olmadığı için yeni platform için güncelleştirilmesi gerekmez. Derlemeyle ilgili argümanlar burada listelenmiştir.
-a|--arch <ARCHITECTURE>--artifacts-path <ARTIFACTS_DIR>-c|--configuration <CONFIGURATION>-f|--framework <FRAMEWORK>-e|--environment <NAME="VALUE">--interactive--no-build--nologo--no-restore-o|--output <OUTPUT_DIRECTORY>--os <OS>-r|--runtime <RUNTIME_IDENTIFIER>-v|--verbosity <LEVEL>
Testle ilgili bağımsız değişkenler VSTest'e özeldir ve bu nedenle yeni platformla eşleşecek şekilde dönüştürülmesi gerekir. Aşağıdaki tabloda VSTest bağımsız değişkenleri ile yeni platform arasındaki eşleme gösterilmektedir:
| VSTest bağımsız değişkeni | Yeni platform argümanı |
|---|---|
--test-adapter-path <ADAPTER_PATH> |
Microsoft.Testing.Platform ile ilgili değil |
--blame |
Microsoft.Testing.Platform ile ilgili değil |
--blame-crash |
--crashdump ( Kilitlenme dökümü uzantısı gerektirir) |
--blame-crash-dump-type <DUMP_TYPE> |
--crashdump-type ( Kilitlenme dökümü uzantısı gerektirir) |
--blame-crash-collect-always |
Desteklenmez |
--blame-hang |
--hangdump ( Kilitlenme bilgi dökümü uzantısı gerektirir) |
--blame-hang-dump-type <DUMP_TYPE> |
--hangdump-type ( Kilitlenme bilgi dökümü uzantısı gerektirir) |
--blame-hang-timeout <TIMESPAN> |
--hangdump-timeout ( Kilitlenme bilgi dökümü uzantısı gerektirir) |
--collect <DATA_COLLECTOR_NAME> |
Veri toplayıcıya bağlıdır |
-d\|--diag <LOG_FILE> |
--diagnostic |
--filter <EXPRESSION> |
Seçilen test çerçevesine bağlıdır |
-l\|--logger <LOGGER> |
Günlük kaydı sistemine bağlıdır |
--results-directory <RESULTS_DIR> |
--results-directory <RESULTS_DIR> |
-s\|--settings <SETTINGS_FILE> |
Seçilen test çerçevesine bağlıdır |
-t\|--list-tests |
--list-tests |
-- <RunSettings arguments> |
--test-parameter ( VSTestBridge tarafından sağlanır) |
--collect
--collect vsTest'te herhangi bir veri toplayıcı için genel bir genişletilebilirlik noktasıdır. Microsoft.Testing.Platform'un genişletilebilirlik modeli farklıdır ve tüm veri toplayıcıları tarafından kullanılacak böyle bir merkezi bağımsız değişken yoktur. Microsoft.Testing.Platform ile her veri toplayıcı kendi komut satırı seçeneğini ekleyebilir. Örneğin, VSTest aracılığıyla Microsoft CodeCoverage çalıştırmak aşağıdakine benzer olabilir:
dotnet test --collect "Code Coverage;Format=cobertura"
Microsoft.Testing.Platform ile bu durum şu hale gelir:
dotnet test --coverage --coverage-output-format cobertura
Önemli
Daha önce açıklandığı gibi, MICROSOFT.Testing.Platform'u VSTest tabanlı dotnet testile kullanırken, platforma geçirilmesi amaçlanan bağımsız değişkenler öncesinde ek -- gereklidir.
Yani, bu olur dotnet test -- --coverage --coverage-output-format cobertura.
--filter
--filter VSTest tabanlı filtredir.
MSTest ve NUnit, Microsoft.Testing.Platform ile çalışırken bile aynı filtre biçimini destekler.
xUnit.net, Microsoft.Testing.Platform ile çalışırken aynı filtre biçimini desteklemez. VSTest tabanlı filtreden, aşağıdaki komut satırı seçenekleri kullanılarak sağlanan xunit.v3'teki yeni filtre desteğine geçmeniz gerekir.
xUnit.net'e özgü seçenekler:
--filter-class--filter-not-class--filter-method--filter-not-method--filter-namespace--filter-not-namespace--filter-trait--filter-not-trait--filter-query
Daha fazla bilgi için xUnit.net için Microsoft.Testing.Platform belgelerine ve xUnit.net için Sorgu Filtresi Dili'ne bakın.
--logger
VSTest'te genellikle "günlükçü" olarak adlandırılan şey, Microsoft.Testing.Platform'da "reporter" olarak adlandırılır. Microsoft.Testing.Platform'da günlük kaydı yalnızca tanılama amacıyla açıkça yapılır.
benzeri--collect--logger, vsTest'te herhangi bir günlükçü (veya Microsoft.Testing.Platform bağlamında herhangi bir muhabir) için genel bir genişletilebilirlik noktasıdır. Her Microsoft.Testing.Platform muhabiri kendi komut satırı seçeneğini ekleyebilir ve bu nedenle VSTest'in --loggergibi merkezi bir komut satırı seçeneği yoktur.
En yaygın kullanılan VSTest günlükçülerinden biri TRX günlükçüdür. Bu logger genellikle aşağıdaki şekilde çağrılır:
dotnet test --logger trx
Microsoft.Testing.Platform ile komut şu hale gelir:
dotnet test --report-trx
Önemli
--report-trx kullanmak için Microsoft.Testing.Extensions.TrxReport NuGet paketinin yüklü olması gerekir.
Önemli
Daha önce açıklandığı gibi, MICROSOFT.Testing.Platform'u VSTest tabanlı dotnet testile kullanırken, platforma geçirilmesi amaçlanan bağımsız değişkenler öncesinde ek -- gereklidir.
Yani, bu olur dotnet test -- --report-trx.
--settings
VSTest --settings test çalıştırması için bir RunSettings dosyası belirtmek amacıyla kullanılır. RunSettings, temel Microsoft.Testing.Platform tarafından desteklenmez ve yerine daha modern testconfig.json bir yapılandırma dosyası kullanılır. Ancak MSTest ve NUnit, Microsoft.Testing.Platform'u çalıştırırken eski RunSettings'i desteklemeye devam eder ve --settings hala desteklenir.
vstest.console.exe
vstest.console.exe komutunu doğrudan kullanıyorsanız, bunu dotnet test komutuyla değiştirmenizi öneririz.
Test Gezgini
Visual Studio veya Visual Studio Code Test Gezgini'ni kullanırken Microsoft.Testing.Platform desteğini etkinleştirmeniz gerekebilir.
Visual Studio
Visual Studio Test Gezgini, 17.14 sürümünden itibaren Microsoft.Testing.Platform'u destekler. Önceki bir sürümü kullanıyorsanız Visual Studio'nuzu en son sürüme güncelleştirmeniz gerekebilir.
Visual Studio Code
C# DevKit ile Visual Studio Code, Microsoft.Testing.Platform'u destekler.
Azure DevOps
Azure DevOps görevlerini kullanırken, hangi görevi kullandığınıza bağlı olarak işlem hattınızı Microsoft.Testing.Platform kullanacak şekilde güncelleştirmeniz gerekebilir.
VSTest görevi
Azure DevOps'ta VSTest görevini kullanıyorsanız, bunu .NET Core göreviyle değiştirebilirsiniz.
.NET Core CLI ile ilgili görev
Özel
argumentsgörev için verildiğinde,dotnet testgeçişi için aynı yönergeleri izleyin.Dosya aracılığıyla .NET 10 SDK ve üzeri için yerel Microsoft.Testing.Platform deneyimine katılmadan
global.jsongörevini kullanıyorsanız, göreviargumentsişaret ettiği sonuç dizinine ve istenen TRX raporuna doğru şekilde ayarlamanız gerekir. Örneğin:- task: DotNetCoreCLI@2 displayName: Run unit tests inputs: command: 'test' arguments: '-- --report-trx --results-directory $(Agent.TempDirectory)'
VSTest ile Microsoft.Testing.Platform arasındaki davranış farklılıkları
Sıfır test çalıştırma
Test derlemesi sıfır test çalıştırdıysa VSTest bunu tolere eder ve başarılı bir şekilde çıkar. Ancak, Microsoft.Testing.Platform çıkış kodu 8 ile başarısız olur. Bu sorunu geçici olarak gidermenin birden çok yolu vardır:
Testlerinizi çalıştırırken
--ignore-exit-code 8simgesini yerleştirin.Belirli bir test projesi için bu çıkış kodunu yoksaymak istiyorsanız, proje dosyasına aşağıdakileri ekleyin:
<PropertyGroup> <TestingPlatformCommandLineArguments>$(TestingPlatformCommandLineArguments) --ignore-exit-code 8</TestingPlatformCommandLineArguments> </PropertyGroup>Ortam değişkenini
TESTINGPLATFORM_EXITCODE_IGNOREkullanın.
Console.InputEncoding koruması
Testlerinizi kod sayfasının açıkça değiştirildiği bir konsolda çalıştırırsanız (örneğin, Azure DevOps'ta kod sayfası UTF8'e karşılık gelen 65001 olarak ayarlanır), davranış VSTest ile Microsoft.Testing.Platform arasında farklı olabilir.
- Microsoft.Testing.Platform ile bu kodlama her zaman korunur.
- VSTest yalıtım modunda çalışmıyorken (vstest.console'un varsayılan davranışı), bu kodlama Microsoft.Testing.Platform'a benzer şekilde korunur.
- VSTest yalıtım modunda çalışırken (varsayılan davranışı
dotnet test), bu kodlama testleri çalıştıran işlem olan testhost'ta korunmaz.
Tavsiye
VsTest yalıtım moduyla kodlamanın korunmama nedeni, testhost işleminin ile CreateNoWindow = truebaşlatılmasıdır. Bu nedenle özgün konsola bağlı değildir.
Başka bir alt işlem başlatan ve standart çıkışını yeniden yönlendiren bir teste sahipseniz, aşağıdakilerin tümü geçerliyse sorunlarla karşılaşabilirsiniz:
- Konsol kod sayfası 65001 (UTF8) olarak ayarlanır. Ci'de bu durum söz konusu olabilir ancak genellikle yerel olarak geçerli değildir. CI'dekine benzer bir yerel davranış elde etmek için testleri çalıştırmadan önce komutunu çalıştırın
chcp 65001. - Alt işlem UTF8 olmayan kodlama ile başlatılır. Kendi testiniz de
CreateNoWindow = trueayarlarsa bu durum oluşabilir.
Bu durum özellikle alt işlemin .NET Framework'teki önceki senaryoda edinebileceği UTF8 BOM (Byte-Order-Mark) baytını görmeyi beklemediği durumlarda sorunludur.
Bu davranış farkı özellikle BOM baytı için sorunlu olabileceğinden, geçici çözüm derleme başlatma sırasında InputEncoding'i BOM'suz UTF8 olarak ayarlamaktır.
Console.InputEncoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false);
Bu durum için farklı bir geçici çözüm, standart girişi yeniden yönlendiren alt işlemler için CreateNoWindow = true kullanmamaktır.