Microsoft. Testing.Platform (MTP) sorunlarını giderme

Bu makalede MTP için sorun giderme yönergeleri yer alır.

Çıkış kodları

MTP, test hatası veya uygulama hatalarını iletmek için bilinen çıkış kodlarını kullanır. Çıkış kodları 0 ile başlar ve negatif olmayan değerlerdir.

Çıkış kodu Ayrıntılar
0 Çıkış 0 kodu başarılı olduğunu gösterir. Çalıştırılacak şekilde seçilen tüm testler tamamlanmak üzere çalıştırıldı ve hiçbir hata yoktu.
1 Bilinmeyen hataları gösteren çıkış 1 kodu, her şeyi kapsayan bir işlev görür. Ek hata bilgilerini ve ayrıntılarını bulmak için çıktıya bakın.
2 çıkış kodu 2 , en az bir test hatası olduğunu belirtmek için kullanılır.
3 Çıkış kodu 3 , test oturumunun durdurulduğunu gösterir. Bir oturum, örnek olarak Ctrl+C kullanılarak durdurulabilir.
4 Çıkış kodu 4 , kullanılan uzantıların kurulumunun geçersiz olduğunu ve test oturumunun çalıştırılamadığını gösterir.
5 Çıkış kodu 5 , test uygulamasına geçirilen komut satırı bağımsız değişkenlerinin geçersiz olduğunu gösterir.
6 (artık kullanılmaz) Çıkış kodu 6 artık platform tarafından üretilmemiştir; daha önce test oturumunun uygulanmamış bir özellik kullandığını gösteriyordu.
7 Çıkış kodu 7 , bir test oturumunun başarıyla tamamlanamadı ve büyük olasılıkla kilitlendiğini gösterir. Bunun nedeni bir test denetleyicisinin uzantı noktası üzerinden çalıştırılan bir test oturumu olabilir.
8 Çıkış kodu 8 , test oturumunun hiçbir test bulmadığını veya seçilen her testin katı --zero-tests-policyaltında atlandığını gösterir.
9 Çıkış kodu 9, çalıştırmanın, sıfır test durumu da dahil olmak üzere, açıkça belirtilen --minimum-expected-tests değerinin gerektirdiğinden daha az test yürüttüğünü gösterir.
10 Çıkış kodu 10 test bağdaştırıcısı olan Testing.Platform Test Framework, MSTest, NUnit veya xUnit'in testin kendisi ile ilgisi olmayan bir altyapı nedeniyle testleri çalıştıralamadığını gösterir. Testler için gerekli bir fikstürün oluşturulamadığı bir örnektir.
11 Çıkış kodu 11, bağımlı işlemden çıkıldığında test işleminin de çıkacağını gösterir.
12 Çıkış kodu 12 , istemci desteklenen protokol sürümlerinden hiçbirini desteklemediğinden test oturumunun çalışamadığını gösterir.
13 Çıkış kodu 13 , komut satırı seçeneği kullanılarak --maximum-failed-tests belirtilen başarısız test sayısı üst sınırına ulaşılması nedeniyle test oturumunun durdurulduğunu gösterir. Daha fazla bilgi için MTP CLI seçenekleri başvurusunun Seçenekler bölümüne bakın
14 Çıkış kodu 14 , uyumlu bir kapsam toplayıcısının başarısız bir kapsam eşiği değerlendirmesi yayımladığını gösterir.

Açıkça belirtilen --minimum-expected-tests değeri, --zero-tests-policy değerini geçersiz kılar. En düşük seçenek olmadan, katı sıfır test işleme çıkış kodunu 8kullanmaya devam eder. 8 ve 9 çıkış kodları birbirinden farklı kalır; böylece karşılanmayan asgari gereksinim, hiç test çalıştırmayan bir modülle karıştırılmaz.

Ayrıntılı günlüğe kaydetmeyi etkinleştirmek ve sorunları gidermek amacıyla Tanılama günlüğü bölümüne bakın.

Çok modüllü bir çalıştırmada sıfır test

Birkaç test modülü çalıştırıldığında dotnet test çıkış kodu 8 modül başına bir sinyaldir, çalıştırmanın tamamı için sıfır test kararı ise toplanan sonuçlardan bir kez belirlenir. Bu nedenle tek bir boş modül tüm çalıştırmayı başarısız kılmaz, ancak modül kendi Exit code: 8 tanı bilgisini çıktıda tutmaya devam eder. Genel en düşük değeri ayarlamadığınızda, modül --zero-tests-policy başına değerden bağımsız olarak tümü atlanan tüm çalıştırma sıfır test çalıştırması olarak kabul edilir. Daha fazla bilgi için bkz. Tam çalıştırma ve modül başına minimum değerler.

Uyarı

Bu çalıştırmanın tamamına ilişkin sıfır test sonucu, .NET 11 SDK'sını veya daha sonraki bir sürümü gerektirir.

Belirli çıkış kodlarını yoksay

MTP, varsayılan olarak katı olacak şekilde tasarlanmıştır ancak yapılandırılabilirlik sağlar. Bu nedenle, kullanıcıların hangi çıkış kodlarının yoksayılacağına karar vermeleri mümkündür (özgün çıkış kodu yerine çıkış kodu 0 döndürülür).

Belirli çıkış kodlarını yoksaymak için --ignore-exit-code komut satırı seçeneğini veya TESTINGPLATFORM_EXITCODE_IGNORE ortam değişkenini kullanın. Kabul edilen geçerli format, yoksaymak için çıkış kodlarının noktalı virgülle ayrılmış bir listesidir (örneğin, --ignore-exit-code 2;3;8). Yaygın bir senaryo, test hatalarının sıfır olmayan bir çıkış koduyla sonuçlanmaması gerektiğini (çıkış kodunu 2yoksaymaya karşılık gelir) göz önünde bulundurmaktır.

Tanılama günlüğü tutma

Platform, test yürütme sorunlarını gidermenize yardımcı olmak için yerleşik tanılama günlüğü sağlar. Tanılama günlüğünü komut satırı seçenekleri veya ortam değişkenleri aracılığıyla etkinleştirebilirsiniz.

Komut satırı seçenekleri

Aşağıdaki platform seçenekleri test uygulamalarınızla ilgili sorunları gidermek için yararlı bilgiler sağlar:

  • --info
  • --diagnostic
  • --diagnostic-synchronous-write
  • --diagnostic-verbosity
  • --diagnostic-file-prefix
  • --diagnostic-output-directory

Ortam değişkenleri

Tanılama günlüklerini ortam değişkenlerini kullanarak da etkinleştirebilirsiniz:

Ortam değişkeni adı Description
TESTINGPLATFORM_DIAGNOSTIC 1olarak ayarlanırsa, tanılama günlüğünü etkinleştirir.
TESTINGPLATFORM_DIAGNOSTIC_VERBOSITY Ayrıntı düzeyini tanımlar. Kullanılabilir değerler Trace, Debug, Information, Warning, Errorveya Critical' dır.
TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_DIRECTORY Tanılama günlüğünün çıkış dizini belirtilmezse, dosya varsayılan TestResults dizininde oluşturulur.
TESTINGPLATFORM_DIAGNOSTIC_FILE_PREFIX Günlük dosyası adının ön eki. Varsayılan, <asm>_<tfm>_<arch>_<timestamp>.diag üretir. 2.3.0 sürümünden itibaren MTP'de kullanılabilir; geriye dönük uyumluluk için eski ad TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_FILEPREFIX hala kabul edilir.
TESTINGPLATFORM_DIAGNOSTIC_SYNCHRONOUS_WRITE Yerleşik dosya günlükçüsüsünü zaman uyumlu bir şekilde günlükleri yazmaya zorlar. İşlemin çöktüğü durumlarda (yani günlük girdilerini kaybetmek istemediğiniz senaryolarda) kullanışlıdır. Bu, test yürütmeyi yavaşlatır. 2.3.0 sürümünden itibaren MTP'de kullanılabilir; geriye dönük uyumluluk için eski ad TESTINGPLATFORM_DIAGNOSTIC_FILELOGGER_SYNCHRONOUSWRITE hala kabul edilir.

Uyarı

Ortam değişkenleri, komut satırı bağımsız değişkenlerinden önceliklidir.

MTP, her test kaynağı için bir tanılama dosyası yazar. İki dosya aynı zaman damgasını alırsa, MTP var olan bir dosyanın üzerine yazmak yerine bir işlem ve sayaç son eki ekler.

Yapılandırma hatalarını düzeltme

Microsoft.Testing.Platform.MSBuild

Microsoft.Testing.Platform.MSBuild ile ilgili yaygın yapılandırma hataları şunlardır.

hata CS8892: Senkron bir giriş noktası 'Program.Main(string[])' bulunduğundan, 'TestingPlatformEntryPoint.Main(string[])' yöntemi giriş noktası olarak kullanılmayacak

Bir test projesinde giriş noktasını (Main) el ile tanımlama veya zaten bir giriş noktası olan bir uygulamadan test projesine başvurmak, MTP tarafından oluşturulan giriş noktasıyla çakışmaya neden olur. Bu sorunu önlemek için şu adımlardan birini uygulayın:

  • el ile tanımlanan giriş noktanızı kaldırın(genellikle Main'da yönteminizi) ve test platformunun sizin için bir tane oluşturmasına izin verin.

  • <GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint> MSBuild özelliğini ayarlayarak giriş noktasının oluşturulmasını devre dışı bırakın.

  • Test projesine başvuran projede, Microsoft.Testing.Platform.MSBuild MSBuild özelliğini ayarlayarak <IsTestingPlatformApplication>false</IsTestingPlatformApplication> geçişli bağımlılığını tamamen devre dışı bırakın. Bu, test olmayan bir projeden test projesine başvurduğunuzda (örneğin, bir test uygulamasına başvuran bir konsol uygulaması) gereklidir.

Oluşturulan kod ad alanı başvuruda bulunan bir türle çakişer

Microsoft.Testing.Platform.MSBuild, projenin SelfRegisteredExtensions içinde TestingPlatformEntryPoint ve $(RootNamespace) türlerini oluşturur. Varsayılan olarak, RootNamespace proje adıyla eşleşir; bu da başvurulan bir derleme tarafından sunulan, aynı tam nitelikli ada sahip bir türle çakışabilir.

Örneğin, System.Security.Cryptography.ProtectedData.Tests adlı bir proje sonunda System.Security.Cryptography.ProtectedData ad alanında kod üretir. Proje, ad alanı altında System.Security.Cryptography.ProtectedData genel ProtectedData bir tür içeren NuGet paketine de başvuruyorsaSystem.Security.Cryptography, derleyici artık oluşturulan ad alanı ile başvurulan tür arasında kesinlik belirtemez ve ("'ProtectedData' bir ad alanıdır ama tür gibi kullanılır") gibi CS0118 hatalar yayar.

Çakışmayı çözmek için test projenizde, RootNamespace öğesini başvurulan türlerden hiçbiriyle çakışmayacak bir değerle geçersiz kılın:

<PropertyGroup>
  <RootNamespace>System.Security.Cryptography.ProtectedDataTests</RootNamespace>
</PropertyGroup>

RootNamespace öğesini tamamen de temizleyebilirsiniz (<RootNamespace />); bu durumda oluşturulan türler genel ad alanına yazılır.

Microsoft.Testing.Extensions.Fakes

Fakes hatası: COR_PROFILER_PATH ve COR_PROFILER ortam değişkenlerinden profilleyici yolunu çözemedi.

Tüm Fakes derlemeleri bin klasöründe mevcut değilse bu hata oluşabilir.

  • Projenin MSTest.SDK kullandığından veya Microsoft.Testing.Extensions.Fakes referans verdiğinden emin olun.
  • .NET Framework projeleri için <PlatformTarget>AnyCPU</PlatformTarget> ayarlamaktan kaçının, bunun sonucunda NuGet tüm dosyaları bin klasörüne kopyalamaz.

Tanınmayan uzantı için komut satırı seçeneği

Bir test uygulaması seçeneği sağlayan paketi kaydetmediğinde uzantıya özgü komut satırı seçeneği çıkış kodu 5 ile başarısız olabilir. Örneğin, --report-trx, ister doğrudan bir paket başvurusu olarak ister paketi içeren bir test SDK yapılandırması veya profili aracılığıyla olsun, Microsoft.Testing.Extensions.TrxReport gerektirir. MTP core rapor, kod kapsamı, döküm, yeniden deneme veya diğer uzantı seçeneklerini içermez.

Seçeneğinin kullanılabilir olduğunu onaylamak için test uygulamasını ile --helpçalıştırın veya MTP modunda çalıştırın dotnet test --help . Seçenek yoksa uzantı paketini ekleyin veya test SDK'nız aracılığıyla uzantıyı etkinleştirin. Gerekli paketi bulmak için bkz. Senaryoya göre uzantı seçenekleri .

Aynı hata, bir çözüm farklı test çerçeveleri (örneğin MSTest ve xUnit.net) ya da farklı uzantı kümeleri (örneğin yalnızca bazı projeler Microsoft.Testing.Extensions.HangDump başvurusu içeriyorsa) kullanan projeler içerdiğinde de oluşur. Seçenek bir proje için geçerlidir, ancak başka bir proje tarafından tanınmaz.

Bu sorunu çözmek için, koşullarla birlikte TestingPlatformCommandLineArguments MSBuild özelliğini kullanarak bağımsız değişkenleri doğru projelere yönlendirin. Ayrıntılı yönergeler için bkz. Karma test çerçeveleri veya uzantıları olan çözümler.