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.
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.
Recommended
Ç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.
- MSTEST0003: Test yöntemlerinin geçerli bir düzeni olmalıdır.
- MSTEST0043: Test yönteminde yeniden deneme özniteliğini kullanın.
All
Bu mod Recommended'den daha agresiftir. Tüm kurallar uyarı olarak etkinleştirilir. Ayrıca, aşağıdaki kurallar hatalara yükseltilir:
- MSTEST0003: Test yöntemlerinin geçerli bir düzeni olmalıdır.
- MSTEST0043: Test yönteminde yeniden deneme özniteliğini kullanın.
Uyarı
Aşağıdaki kurallar tamamen kabul edilir ve Default, Recommendedveya All modlarında etkinleştirilmez:
- MSTEST0015: Test yöntemi yoksayılmamalıdır
- MSTEST0019: Oluşturucular yerine TestInitialize yöntemlerini tercih
- MSTEST0020: TestInitialize yöntemleri yerine oluşturucuları tercih
- MSTEST0021: TestCleanup yöntemleri yerine Dispose'ı tercih edin
- MSTEST0022: Dispose yöntemleri yerine TestCleanup'ı tercih
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 yerineFile.Existskullanı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