MSTest kod analizi

MSTest analizi ("MSTESTxxxx") kuralları C# veya Visual Basic kodunuzu güvenlik, performans, tasarım ve diğer sorunlar açısından inceler.

İpucu

Visual Studio kullanıyorsanız, birçok çözümleyici kuralının sorunu düzeltmek için uygulayabileceğiniz ilişkili kod düzeltmeleri vardır. Ampul simgesi menüsünde kod düzeltmeleri gösterilir.

Kurallar, performans kullanımı gibi kategoriler halinde düzenlenmiştir...

MSTest.TestFramework 3.7'den başlayarak, MSTest.Analyzers NuGet paketi çerçevenin bir bağımlılığıdır. Önceki sürümler için MSTest meta paketi kullanmanız veya MSTest.Analyzers için açıkça bir paket başvurusu eklemeniz gerekir.

MSTestAnalizModu

MSTest 3.8'den başlayarak, hangi çözümleyicilerin hangi önem derecesinde etkinleştirildiğini belirlemek için MSTestAnalysisMode adlı bir MSBuild özelliği kullanılabilir.

İpucu

Her mod için hangi kuralların hangi önem derecesinde etkinleştirildiğini görmek için NuGet önbelleğindeki ilgi alanı sürümünün paketine gidebilir, globalconfigs dizinini bulabilir ve analiz moduna karşılık gelen .globalconfig dosyasını açabilirsiniz. NuGet önbellek dizinini bulma hakkında daha fazla bilgi için bkz. genel paketleri, önbelleği ve geçici klasörleri yönetme. Bu dizinden mstest.analyzers dizinini bulun, ardından sürümünü (3.8 ve üzeri), sonra da globalconfigs. Alternatif olarak, ilgi alanı sürümünün NuGet paketini nuget.org indirip NuGet Paket Gezgini'nde (Windows uygulaması) görüntüleyebilir veya doğrudan NuGet Paket Gezgini'ninweb uygulaması sürümünde görüntüleyebilirsiniz.

Bu özellik için kullanılabilir değerler:

None

Bu değer, tüm çözümleyicileri none önem derecesine ayarlar ve bunların tümünü devre dışı bırakır. Daha sonra .editorconfig veya .globalconfig dosyaları kullanarak tek tek çözümleyicileri etkinleştirebilirsiniz.

Default

Bu ayar, her kural için varsayılan belgelenmiş davranışı izler.

  • Varsayılan olarak etkinleştirilen kurallar, varsayılan önem derecelerini kullanır.
  • Varsayılan olarak devre dışı bırakılan kurallar none önem derecesini kullanır.

Uyarı

Uyarı olarak varsayılan olarak etkinleştirilen kurallar, çalışma zamanında sorunlara neden olması beklenen ihlallerdir.

Çoğu geliştiricinin kullanması beklenen mod budur. Varsayılan olarak Bilgi (suggestion) önem derecesiyle etkinleştirilen kurallar, uyarılara yükseltilir. Aşağıdaki kurallar hem Recommended hem de All modlarında hatalara yükseltilir.

All

Bu mod Recommended'den daha agresiftir. Tüm kurallar uyarı olarak etkinleştirilir. Ayrıca, aşağıdaki kurallar hatalara yükseltilir:

Uyarı

Aşağıdaki kurallar tamamen kabul edilir ve Default, Recommendedveya All modlarında etkinleştirilmez:

Kategoriye göre kurallar

Çözümleyici kuralları aşağıdaki kategorilere göre düzenlenir:

Tasarım kuralları

Tasarım kuralları uygun tasarıma ve iyi uygulamalara uygun test paketleri oluşturmanıza ve sürdürmenize yardımcı olur.

Performans kuralları

Performans kuralları yüksek performanslı testi destekler.

Bastırma kuralları

Gizleme kuralları diğer kurallardan gelen teşhisleri gizlemeyi destekler.

Kullanım kuralları

Kullanım kuralları MSTest'in düzgün kullanımını destekler.

Kavramlara göre kurallar

Yaygın test senaryolarına ve kavramlara göre düzenlenmiş kuralları bulun:

Test yapısı ve öznitelikleri

Test sınıflarınızın ve yöntemlerinizin düzgün bir şekilde yapılandırılmasını ve dekore edilmesini sağlamaya yardımcı olan kurallar:

  • MSTEST0002 - Test sınıfı geçerli olmalıdır
  • MSTEST0003 - Test yöntemi geçerli olmalıdır
  • MSTEST0004 - Herkese açık türler test sınıfı olmalıdır
  • MSTEST0007 - Test yönteminde özniteliği kullanma
  • MSTEST0016 - Test sınıfı test yöntemine sahip olmalıdır
  • MSTEST0029 - Genel yöntem test yöntemi olmalıdır
  • MSTEST0030 - Test yöntemini içeren tür bir test sınıfı olmalıdır
  • MSTEST0036 - Gölgelendirme kullanmayın
  • MSTEST0041 - Test sınıfıyla koşul tabanlı öznitelikleri kullanma
  • MSTEST0044 - DataTestMethod yerine TestMethod'un tercihi
  • MSTEST0056 - TestMethodAttribute DisplayName'i doğru ayarlamalıdır
  • MSTEST0057 - TestMethodAttribute kaynak bilgilerini yaymalıdır
  • MSTEST0060 - Yinelenen TestMethodAttribute
  • MSTEST0063 - Test sınıfı geçerli oluşturucuya sahip olmalıdır
  • MSTEST0069 - Devralınan [TestClass] MSTest kaynak üreteci tarafından yok sayılır
  • MSTEST0071 - Test yöntemi, adıyla aynı bir görünen ad belirtmemelidir
  • - [AssemblyFixtureProvider] MSTEST0072 önceden derleme ile desteklenmez
  • MSTEST0078 - [DependsOn] bağımsız değişkenler geçerli olmalıdır
  • - [TestFilterProvider] MSTEST0081 geçerli bir test filtresi türüne başvurmalıdır
  • MSTEST0082 - Test sınıfı, yaşam döngüsünü veya test yöntemini farklı bir MSTest sürümünden devralır

İlgili belgeler: MSTest ile test yazma

Asenkron/await kalıpları

Zaman uyumsuz test kodunu doğru yazma kuralları:

  • MSTEST0013 - AssemblyCleanup geçerli olmalıdır (asenkron kuralları içerir)
  • MSTEST0027 - Test yöntemleri için asenkron son ekini kaldır
  • MSTEST0028 - Test fikstür yöntemleri için asenkron son eki gizleme
  • MSTEST0039 - Daha yeni Assert.Throws yöntemlerini (zaman uyumsuz değişkenler) kullanın
  • MSTEST0040 - Assert'leri async void bağlamında kullanmaktan kaçının
  • MSTEST0045 - Zaman aşımı için eşzamanlı iptal kullanma
  • MSTEST0049 - Akış TestContext İptal Belirteci
  • MSTEST0054 - CancellationToken özelliğini kullanma
  • MSTEST0064 - Eşzamansız doğrulama yöntemlerini tercih edin
  • MSTEST0067 - Test kodundaki çağrıları zaman uyumlu bir şekilde engellemekten kaçının

İlgili belgeler: TestContext

Veri temelli test

Veri temelli test senaryolarıyla çalışma kuralları:

  • MSTEST0007 - Test yönteminde özniteliği kullanma
  • MSTEST0014 - DataRow geçerli olmalıdır
  • MSTEST0018 - DynamicData geçerli olmalıdır
  • MSTEST0042 - Yinelenen Veri Satırı
  • MSTEST0052 - Açık DynamicDataSourceType'ı kullanmaktan kaçının
  • MSTEST0062 - Out/ref test yöntemi parametrelerinden kaçının

İlgili belgeler: Veri temelli test

Yaşam döngüsü ve başlatma

Test başlatma, temizleme ve yaşam döngüsü yönetimi kuralları:

  • MSTEST0008 - TestInitialize geçerli olmalıdır
  • MSTEST0009 - TestCleanup geçerli olmalıdır
  • MSTEST0010 - ClassInitialize geçerli olmalıdır
  • MSTEST0011 - ClassCleanup geçerli olmalıdır
  • MSTEST0012 - AssemblyInitialize geçerli olmalıdır
  • MSTEST0013 - AssemblyCleanup geçerli olmalıdır
  • MSTEST0019 - Oluşturucular yerine TestInitialize'i tercih edin
  • MSTEST0020 - Oluşturucuları TestInitialize yerine tercih edin
  • MSTEST0021 - TestCleanup yerine Dispose'ı tercih edin
  • MSTEST0022 - Dispose yerine TestCleanup'ı tercih edin
  • MSTEST0034 - ClassCleanupBehavior.EndOfClass Kullanın
  • MSTEST0047 - Başlatma ve temizleme yöntemlerinde kullanılmayan TestContext parametresi için IDE0060 gizleme
  • MSTEST0050 - Genel test fikstürünün geçerli olması gerekir
  • - [Ignore] MSTEST0066 bir gerekçe belirtmelidir

İlgili belgeler: Yaşam Döngüsü

Assertions

Onay yöntemlerini doğru ve etkili bir şekilde kullanma kuralları:

  • MSTEST0006 - ExpectedException özniteliğinden kaçının
  • MSTEST0014 - DataRow geçerli olmalıdır
  • MSTEST0017 - Onay bağımsız değişkenleri doğru sırada verilmelidir
  • MSTEST0023 - Boolean doğrulamalarını tersine çevirmeyin
  • MSTEST0025 - Daima yanlış olan koşullar yerine Assert.Fail'i tercih edin
  • MSTEST0026 - Doğrulama argümanları koşullu erişimden kaçınmalıdır
  • MSTEST0032 - Her zaman doğru olan assert koşulunu gözden geçirme
  • MSTEST0037 - Doğru onay yöntemlerini kullanma
  • MSTEST0038 - Değer türleriyle Assert.AreSame'den kaçının
  • MSTEST0039 - Daha yeni Assert.Throws yöntemlerini kullanın
  • MSTEST0046 - StringAssert yerine Assert kullanın
  • MSTEST0051 - Assert.Throws tek bir ifade içermelidir
  • MSTEST0053 - Assert biçim parametrelerinden kaçının
  • MSTEST0058 - Catch bloklarında assert'lerden kaçının
  • MSTEST0064 - Eşzamansız doğrulama yöntemlerini tercih edin
  • MSTEST0065 - Koleksiyon türlerinde Assert.AreEqual'i kullanmaktan kaçının
  • MSTEST0068 - CollectionAssert yerine Assert kullanın

İlgili belgeler: Onaylar

TestContext

TestContext nesnesini düzgün kullanma kuralları:

  • MSTEST0005 - TestContext geçerli olmalıdır
  • MSTEST0024 - Statik TestContext depolamayın
  • MSTEST0033 - Null değer atanamayan başlatılmamış referans uyarısını bastırma
  • MSTEST0047 - TestContext parametresi için IDE0060 gizleme
  • MSTEST0048 - TestContext özellik kullanımı
  • MSTEST0049 - Akış TestContext İptal Belirteci
  • MSTEST0054 - CancellationToken özelliğini kullanma

İlgili belgeler: TestContext

Paralel test güvenliği

Paralel testlerin paylaşılan kaynakları koordine etmelerine ve işlem genelindeki durumdan kaçınmasına yardımcı olan kurallar:

  • MSTEST0073 - Kaynak anahtarı için [ResourceLock] sabiti tercih edin
  • MSTEST0074 - İşlem genelindeki durumu değiştiren testler bir kaynak kilidi bildirmelidir
  • MSTEST0075 - Paralelleştirilmiş testte geçerli dizini değiştirmekten kaçının
  • MSTEST0076 - Paralelleştirilmiş bir testte işlem genelindeki kültürü değiştirmekten kaçının
  • MSTEST0077 - Paralelleştirilmiş testte sabit kodlanmış veya paylaşılan dosya sistemi yollarından kaçının

İlgili belgeler: Test yürütme ve denetim, TestContext

Test yapılandırması

Test yürütme, paralelleştirme ve diğer test ayarlarını yapılandırma kuralları:

  • MSTEST0001 - Parallelize özniteliğini kullanma
  • MSTEST0015 - Test yöntemi yoksayılmamalıdır
  • MSTEST0031 - System.ComponentModel.DescriptionAttribute kullanmayın
  • MSTEST0035 - DeploymentItem'i test yöntemi veya test sınıfıyla kullanma
  • MSTEST0043 - Test yönteminde yeniden deneme özniteliğini kullanma
  • MSTEST0045 - Zaman aşımı için eşzamanlı iptal kullanma
  • MSTEST0055 - Dize yöntemi dönüş değerini göz ardı etmeyin
  • MSTEST0059 - Paralelleştirme özniteliğini doğru kullanma
  • MSTEST0061 - Çalışma zamanı denetimi yerine OSCondition özniteliğini kullanma
  • MSTEST0070 - [MemberCondition] argümanları geçerli olmalıdır
  • - [AssemblyFixtureProvider] MSTEST0072 önceden derleme ile desteklenmez
  • MSTEST0078 - [DependsOn] bağımsız değişkenleri geçerli olmalıdır
  • MSTEST0079 - Çalışma zamanı denetimleri yerine ArchitectureCondition özniteliğini kullanma
  • MSTEST0080 - Ortam denetimleri yerine CICondition özniteliğini kullanma
  • - [TestFilterProvider] MSTEST0081 geçerli bir test filtresi türüne başvurmalıdır
  • MSTEST0082 - Test sınıfı, yaşam döngüsünü veya test yöntemini farklı bir MSTest sürümünden devralır
  • MSTEST0083 - Process.Start öncesinde [ExecutableCondition] denetimleri yerine File.Exists kullanın

İlgili belgeler: MSTest'i yapılandırma, Testleri çalıştırma

Tüm kurallar (hızlı rehber)

Kural Kimliği Kategori Başlık Varsayılan Önem Derecesi
MSTEST0001 Performance Parallelize özniteliğini kullanma Bilgi
MSTEST0002 Usage Test sınıfı geçerli olmalıdır Uyarı
MSTEST0003 Usage Test yöntemi geçerli olmalıdır Uyarı → Hata*
MSTEST0004 Design Genel türler test sınıfları olmalıdır Bilgi
MSTEST0005 Usage TestContext geçerli olmalıdır Uyarı
MSTEST0006 Design ExpectedException özniteliğinden kaçının Bilgi
MSTEST0007 Usage Test yönteminde özniteliği kullanma Uyarı
MSTEST0008 Usage TestInitialize geçerli olmalıdır Uyarı
MSTEST0009 Usage TestCleanup geçerli olmalıdır Uyarı
MSTEST0010 Usage ClassInitialize geçerli olmalıdır Uyarı
MSTEST0011 Usage ClassCleanup geçerli olmalıdır Uyarı
MSTEST0012 Usage AssemblyInitialize geçerli olmalıdır Uyarı
MSTEST0013 Usage AssemblyCleanup geçerli olmalıdır Uyarı
MSTEST0014 Usage DataRow geçerli olmalıdır Uyarı
MSTEST0015 Design Test yöntemi görmezden gelinmemelidir Hiçbiri (seçenekli katılım)
MSTEST0016 Design Test sınıfı test yöntemine sahip olmalıdır Bilgi
MSTEST0017 Usage Onay argümanları doğru sırada iletilmelidir Bilgi
MSTEST0018 Usage DynamicData geçerli olmalıdır Uyarı
MSTEST0019 Design Oluşturucular yerine TestInitialize'i tercih edin Hiçbiri (seçenekli katılım)
MSTEST0020 Design Oluşturucuları TestInitialize yerine tercih et Hiçbiri (seçenekli katılım)
MSTEST0021 Design TestCleanup yerine Dispose'ı tercih edin Hiçbiri (seçenekli katılım)
MSTEST0022 Design Dispose yerine TestCleanup'ı tercih edin Hiçbiri (seçenekli katılım)
MSTEST0023 Usage Boolean ifadelerini olumsuzlamayın Bilgi
MSTEST0024 Usage Statik TestContext saklamayın Uyarı
MSTEST0025 Design "Assert.Fail yöntemini, her zaman yanlış olan koşullara tercih edin" Bilgi
MSTEST0026 Usage Doğrulama argümanları koşullu erişim kullanmaktan kaçınılmalıdır. Bilgi
MSTEST0027 Suppression Test metotları için asenkron son eki gizleme N/A
MSTEST0028 Suppression Test fikstür metotları için eşzamanlı olmayan son eki gizleme N/A
MSTEST0029 Design Genel yöntem test yöntemi olmalıdır Bilgi
MSTEST0030 Usage Test yöntemini içeren sınıf bir test sınıfı olmalıdır Uyarı
MSTEST0031 Usage System.ComponentModel.DescriptionAttribute kullanmayın Bilgi
MSTEST0032 Usage Daima doğru doğrulama koşulunu gözden geçirme Bilgi
MSTEST0033 Suppression Başlatılmamış null atanamayan referansı bastır. N/A
MSTEST0034 Usage ClassCleanupBehavior.EndOfClass kullanın Bilgi
MSTEST0035 Usage DeploymentItem'i test yöntemi veya test sınıfıyla kullanma Bilgi
MSTEST0036 Design Gölgelendirme kullanmayın Uyarı
MSTEST0037 Usage Doğru onay yöntemlerini kullanma Bilgi
MSTEST0038 Usage Assert.AreSame yöntemini değer türleri ile kullanmaktan kaçının. Bilgi
MSTEST0039 Usage Daha yeni Assert.Throws yöntemlerini kullanma Bilgi
MSTEST0040 Usage Doğrulama ifadelerini async void bağlamında kullanmaktan kaçının Uyarı
MSTEST0041 Usage Test sınıfıyla koşul tabanlı öznitelikleri kullanma Uyarı
MSTEST0042 Usage Yinelenen DataRow Uyarı
MSTEST0043 Usage Test yönteminde retry özniteliğini kullanma Uyarı → Hata*
MSTEST0044 Design DataTestMethod yerine TestMethod'un tercihi Bilgi
MSTEST0045 Design Zaman aşımı için eşzamanlı iptal kullanın Bilgi
MSTEST0046 Usage StringAssert yerine Assert kullanın Bilgi
MSTEST0047 Suppression TestContext parametresi için IDE0060 gizleme N/A
MSTEST0048 Usage TestContext özellik kullanımı Uyarı
MSTEST0049 Usage Flow TestContext CancellationToken Bilgi
MSTEST0050 Usage Genel test fikstürünün geçerli olması gerekir Uyarı
MSTEST0051 Usage Assert.Throws yalnızca tek bir deyim içermelidir Bilgi
MSTEST0052 Usage Açık DynamicDataSourceType'ı kullanmaktan kaçının Bilgi
MSTEST0053 Usage Assert biçim parametrelerinden kaçının Bilgi
MSTEST0054 Usage CancellationToken özelliğini kullanma Bilgi
MSTEST0055 Usage Dize yöntemi dönüş değerini yoksaymayın Uyarı
MSTEST0056 Usage TestMethodAttribute, DisplayName'i doğru ayarlamalıdır Bilgi
MSTEST0057 Usage TestMethodAttribute kaynak bilgilerini yaymalıdır Uyarı
MSTEST0058 Usage Catch bloklarında assert'lerden kaçının Bilgi
MSTEST0059 Usage Parallelize özniteliğini doğru kullanma Uyarı
MSTEST0060 Usage Yinelenen TestMethodAttribute Uyarı
MSTEST0061 Usage Çalışma zamanı denetimi yerine OSCondition özniteliğini kullanma Bilgi
MSTEST0062 Usage Out/ref test yöntemi parametrelerinden kaçının Uyarı
MSTEST0063 Usage Test sınıfı geçerli bir oluşturucuya sahip olmalıdır Uyarı
MSTEST0064 Usage Eşzamansız doğrulama yöntemlerini tercih edin Bilgi
MSTEST0065 Usage Koleksiyon türlerinde Assert.AreEqual kullanmaktan kaçının Uyarı
MSTEST0066 Design [Ignore] bir gerekçe belirtmelidir Bilgi
MSTEST0067 Usage Test kodundaki çağrıları zaman uyumlu olarak engellemekten kaçının Bilgi (varsayılan olarak devre dışı)
MSTEST0068 Usage Assert yerine CollectionAssert kullanma Bilgi
MSTEST0069 Usage Devralınan [TestClass] MSTest kaynak oluşturucusu tarafından yok sayılır Uyarı
MSTEST0070 Usage [MemberCondition] argümanlar geçerli olmalıdır Uyarı
MSTEST0071 Usage Test yöntemi, adıyla aynı bir görünen ad belirtmemelidir Bilgi
MSTEST0072 Usage [AssemblyFixtureProvider] önceden derleme ile desteklenmez Uyarı
MSTEST0073 Usage Kaynak anahtarı için sabiti tercih edin [ResourceLock] Bilgi
MSTEST0074 Usage İşlem genelindeki durumu değiştiren test bir kaynak kilidi bildirmelidir Bilgi
MSTEST0075 Usage Paralelleştirilmiş testte geçerli dizini değiştirmekten kaçının Bilgi
MSTEST0076 Usage Paralelleştirilmiş bir testte işlem genelindeki kültürü değiştirmekten kaçının Bilgi
MSTEST0077 Usage Paralelleştirilmiş testte sabit kodlanmış veya paylaşılan dosya sistemi yollarından kaçının Bilgi
MSTEST0078 Usage [DependsOn] argümanlar geçerli olmalıdır Uyarı
MSTEST0079 Usage Çalışma zamanı denetimleri yerine ArchitectureCondition özniteliğini kullanma Bilgi
MSTEST0080 Usage Ortam denetimleri yerine CICondition özniteliğini kullanma Bilgi
MSTEST0081 Usage [TestFilterProvider] geçerli bir test filtresi türüne başvurmalıdır Uyarı
MSTEST0082 Usage Test sınıfı, farklı bir MSTest sürümünden yaşam döngüsü veya test yöntemini devralır Uyarı
MSTEST0083 Usage Process.Start öncesinde [ExecutableCondition] denetimleri yerine File.Exists kullanın Bilgi

* Recommended ve All modlarında hataya yükseltildi.

MSTESTEXP

Birkaç MSTest API'si ExperimentalAttributeile işaretlenmiştir. Bu öznitelik, API'nin deneysel olduğunu ve MSTest'in gelecekteki sürümlerinde kaldırılabileceğini veya değiştirilebileceğini gösterir. özniteliği, henüz kararlı olmayan ve üretim kullanımı için uygun olmayan API'leri tanımlamak için kullanılır.

MSTESTEXP tanılaması, kodunuzda deneysel bir API kullanmanız konusunda sizi uyarır. SuppressMessageAttributeile bu tanılamayı engellemek için projenize aşağıdaki kodu ekleyin:

using System.Diagnostics.CodeAnalysis;

[assembly: SuppressMessage("MSTESTEXP", "Justification")]

Alternatif olarak, projenize aşağıdaki kodu ekleyerek bu tanılamayı ön işlemci yönergesiyle gizleyebilirsiniz:

#pragma warning disable MSTESTEXP
        // API that is causing the warning.
#pragma warning restore MSTESTEXP