Analýza kódu MSTest

Pravidla analýzy MSTest (MSTESTxxxx) kontrolují kód jazyka C# nebo Visual Basic pro zabezpečení, výkon, návrh a další problémy.

Návod

Pokud používáte Visual Studio, mnoho pravidel analyzátoru má přidružené opravy kódu, které můžete použít k vyřešení problému. Opravy kódu se zobrazují v nabídce ikon žárovky.

Pravidla jsou uspořádaná do kategorií, jako je využití výkonu...

Počínaje verzí MSTest.TestFramework 3.7 je balíček MSTest.Analyzers NuGet závislostí frameworku. Pro starší verze je potřeba použít MSTest metabalíč nebo přidat odkaz na balíček pro MSTest.Analyzers explicitně.

MSTestAnalysisMode

Počínaje verzí MSTest 3.8 je k dispozici vlastnost MSBuild s názvem MSTestAnalysisMode, která určuje, které analyzátory jsou povoleny v jaké závažnosti.

Návod

Pokud chcete zjistit, která pravidla jsou povolena s jakou závažností pro každý režim, můžete přejít na balíček verze zájmu v mezipaměti NuGet, vyhledat globalconfigs adresář a otevřít soubor .globalconfig odpovídající režimu analýzy. Další informace o hledání adresáře mezipaměti NuGet najdete v tématu Správa globálních balíčků, mezipaměti a dočasných složek. V adresáři vyhledejte mstest.analyzers adresář, potom verzi (3.8 a vyšší) a pak globalconfigs. Případně si můžete stáhnout balíček NuGet verze, která vás zajímá, z nuget.org a prohlédnout ho v Průzkumníku balíčků NuGet (aplikace pro Windows), nebo ho prohlédnout přímo ve webové verzi Průzkumníka balíčků NuGet ve verzi.

Dostupné hodnoty pro tuto vlastnost:

None

Tato hodnota nastaví všechny analyzátory na none závažnosti a zakáže je všechny. Jednotlivé analyzátory pak můžete povolit pomocí .editorconfig nebo .globalconfig souborů.

Default

Toto nastavení se řídí výchozím zdokumentovaným chováním pro každé pravidlo.

  • Pravidla, která jsou ve výchozím nastavení povolená, budou používat výchozí závažnost.
  • Pravidla, která jsou ve výchozím nastavení zakázaná, budou používat závažnost none.

Poznámka

Pravidla, která jsou ve výchozím nastavení povolená jako upozornění, jsou porušení, u kterých se očekává, že způsobí problémy během běhu.

Očekává se, že tento režim bude používat většina vývojářů. Pravidla, která mají ve výchozím nastavení povolenou závažnost Informace (suggestion), jsou eskalována na varování. Následující pravidla jsou eskalována k chybám v obou Recommended režimech All :

All

Tento režim je agresivnější než Recommended. Všechna pravidla jsou povolená jako upozornění. Kromě toho jsou následující pravidla eskalována k chybám:

Pravidla podle kategorie

Pravidla analyzátoru jsou uspořádaná do následujících kategorií:

Pravidla návrhu

Pravidla návrhu pomáhají vytvářet a udržovat testovací sady, které dodržují správné postupy návrhu.

Pravidla výkonu

pravidla výkonu podporují vysoce výkonné testování.

Pravidla potlačení

Pravidla potlačení nabízejí podporu pro potlačení diagnostiky z jiných pravidel.

Pravidla použití

pravidla použití podporují správné použití MSTestu.

Pravidla podle konceptu

Najděte pravidla uspořádaná běžnými testovacími scénáři a koncepty:

Struktura testů a atributy

Pravidla, která pomáhají zajistit, aby vaše testovací třídy a metody byly správně strukturované a zdobené:

  • MSTEST0002 – Testovací třída by měla být platná.
  • MSTEST0003 – testovací metoda by měla být platná.
  • MSTEST0004 – Veřejné typy by měly být testovací třídy
  • MSTEST0007 – použití atributu pro testovací metodu
  • MSTEST0016 – testovací třída by měla mít testovací metodu
  • MSTEST0029 – veřejná metoda by měla být testovací metoda
  • MSTEST0030 – typ obsahující testovací metodu by měl být testovací třída.
  • MSTEST0036 – nepoužívejte stínování
  • MSTEST0041 – Použití atributů založených na podmínce s testovací třídou
  • MSTEST0044 – Preferujte TestMethod před DataTestMethod
  • MSTEST0056 – TestMethodAttribute by měl správně nastavit DisplayName.
  • MSTEST0057 – TestMethodAttribute by měl šířit informace o zdroji.
  • MSTEST0060 – Duplicitní TestMethodAttribute
  • MSTEST0063 – testovací třída by měla mít platný konstruktor.

Související dokumentace: Psaní testů pomocí MSTestu

Vzory Async/await

Pravidla pro zápis asynchronního testovacího kódu správně:

  • MSTEST0013 – AssemblyCleanup by měl být platný (včetně asynchronních pravidel)
  • MSTEST0027 – Potlačení přípony 'async' u testovacích metod
  • MSTEST0028 – Potlačení asynchronní přípony pro metody zkušebního zařízení
  • MSTEST0039 – Použití novějších metod Assert.Throws (asynchronní varianty)
  • MSTEST0040 – Vyhněte se použití asercí v asynchronním kontextu void.
  • MSTEST0045 – k vypršení časového limitu použijte kooperativní zrušení.
  • MSTEST0049 – Tok zrušení TestContextu
  • MSTEST0054 – použití vlastnosti CancellationToken

Související dokumentace: TestContext

Testování řízené daty

Pravidla pro práci se scénáři testů řízenými daty:

  • MSTEST0007 – použití atributu pro testovací metodu
  • MSTEST0014 – Hodnota DataRow by měla být platná.
  • MSTEST0018 – DynamicData by měla být platná.
  • MSTEST0042 – Duplicitní řádek dat
  • MSTEST0052 – Vyhněte se explicitnímu dynamicDataSourceType
  • MSTEST0062 – vyhněte se parametrům metody testování out/ref

Související dokumentace: Testování řízené daty

Životní cyklus a inicializace

Pravidla pro inicializaci testů, vyčištění a správu životního cyklu:

  • MSTEST0008 – Hodnota TestInitialize by měla být platná.
  • MSTEST0009 – TestCleanup by měl být platný.
  • MSTEST0010 – ClassInitialize by měla být platná.
  • MSTEST0011 – ClassCleanup by měla být platná.
  • MSTEST0012 – AssemblyInitialize by měla být platná.
  • MSTEST0013 – AssemblyCleanup by měl být platný
  • MSTEST0019 – Preferujte TestInitialize před konstruktory
  • MSTEST0020 – Preferujte konstruktory před TestInitialize
  • MSTEST0021 – Preferujte metodu Dispose před TestCleanup
  • MSTEST0022 – Preferujte testCleanup před Dispose
  • MSTEST0034 – Použití třídyCleanupBehavior.EndOfClass
  • MSTEST0050 - Globální zkušební zařízení by mělo být platné

Související dokumentace: Životní cyklus

Assertions

Pravidla pro správné a efektivní použití asertivních metod:

  • MSTEST0006 – vyhněte se atributu ExpectedException
  • MSTEST0014 – Hodnota DataRow by měla být platná.
  • MSTEST0017 – argumenty tvrzení by měly být předány ve správném pořadí.
  • MSTEST0023 – Nenegujte logické kontrolní výrazy
  • MSTEST0025 – Preferujte Assert.Fail nad vždy-nesprávnými podmínkami
  • MSTEST0026 – Argumenty kontrolních výrazů by se měly vyhnout podmíněnému přístupu
  • MSTEST0032 – Zkontrolovat podmínku asertu, která je vždy pravdivá
  • MSTEST0037 – použití správných metod assert
  • MSTEST0038 – Vyhněte se Assert.AreSame s typy hodnot
  • MSTEST0039 – použití novějších metod Assert.Throws
  • MSTEST0046 – Místo StringAssert použijte assert.
  • MSTEST0051 – Assert.Throws by měl obsahovat jeden příkaz.
  • MSTEST0053 – Vyhněte se parametrům formátu Assert
  • MSTEST0058 – Vyhněte se asertům v blocích catch

Související dokumentace: Asserty

TestContext

Pravidla pro správné použití objektu TestContext:

  • MSTEST0005 – TestContext by měl být platný.
  • MSTEST0024 – Neukládejte statický testContext
  • MSTEST0033 – Potlačení upozornění na neinicializovaný nenullovatelný odkaz
  • MSTEST0048 – použití vlastnosti TestContext
  • MSTEST0049 – Tok zrušení TestContextu
  • MSTEST0054 – použití vlastnosti CancellationToken

Související dokumentace: TestContext

Testovací konfigurace

Pravidla pro konfiguraci spouštění testů, paralelizace a dalších nastavení testů:

  • MSTEST0001 – použití atributu Parallelize
  • MSTEST0015 – testovací metoda by neměla být ignorována.
  • MSTEST0031 – Nepoužívejte System.ComponentModel.DescriptionAttribute
  • MSTEST0035 – použijte DeploymentItem s testovací metodou nebo testovací třídou
  • MSTEST0043 – Použití atributu opakování pro testovací metodu
  • MSTEST0045 – k vypršení časového limitu použijte kooperativní zrušení.
  • MSTEST0055 – Neignorovat návratovou hodnotu metody řetězce
  • MSTEST0059 – správné použití atributu Parallelize
  • MSTEST0061 – Místo kontroly za běhu použijte atribut OSCondition.

Související dokumentace: Konfigurace MSTest, spouštění testů

Všechna pravidla (rychlá referenční dokumentace)

ID pravidla Kategorie Title Výchozí závažnost
MSTEST0001 Performance Použití atributu Parallelize Informace
MSTEST0002 Usage Testovací třída by měla být platná. Výstraha
MSTEST0003 Usage Testovací metoda by měla být platná. Upozornění → Chyba*
MSTEST0004 Design Veřejné typy by měly být testovací třídy. Informace
MSTEST0005 Usage TestContext by měl být platný. Výstraha
MSTEST0006 Design Vyhněte se atributu ExpectedException Informace
MSTEST0007 Usage Použití atributu pro testovací metodu Výstraha
MSTEST0008 Usage TestInitialize by měl být platný. Výstraha
MSTEST0009 Usage TestCleanup by měl být platný. Výstraha
MSTEST0010 Usage Metoda ClassInitialize by měla být platná. Výstraha
MSTEST0011 Usage TřídaCleanup by měla být platná. Výstraha
MSTEST0012 Usage AssemblyInitialize by mělo být platné. Výstraha
MSTEST0013 Usage AssemblyCleanup by měl být platný. Výstraha
MSTEST0014 Usage DataRow by měl být platný. Výstraha
MSTEST0015 Design Testovací metoda by neměla být ignorována. Žádné (výslovný souhlas)
MSTEST0016 Design Testovací třída by měla mít testovací metodu. Informace
MSTEST0017 Usage Argumenty asertací by měly být předány ve správném pořadí. Informace
MSTEST0018 Usage DynamicData by měla být platná. Výstraha
MSTEST0019 Design Preferovat TestInitialize před konstruktory Žádné (výslovný souhlas)
MSTEST0020 Design Preferovat konstruktory před TestInitialize Žádné (výslovný souhlas)
MSTEST0021 Design Preferujte Dispose před TestCleanup Žádné (výslovný souhlas)
MSTEST0022 Design Preferujte TestCleanup před Dispose Žádné (výslovný souhlas)
MSTEST0023 Usage Nepopírat booleovský výrok Informace
MSTEST0024 Usage Neukládejte statickou TestContext. Výstraha
MSTEST0025 Design Preferujte Assert.Fail před vždy-falešnými podmínkami Informace
MSTEST0026 Usage Argumenty asercí by se měly vyhnout podmínkovému přístupu. Informace
MSTEST0027 Suppression Potlačení přípony async u testovacích metod N/A
MSTEST0028 Suppression Potlačení asynchronní přípony pro metody zkoušky N/A
MSTEST0029 Design Veřejná metoda by měla být testovací metoda. Informace
MSTEST0030 Usage Typ obsahující testovací metodu by měl být testovací třídou. Výstraha
MSTEST0031 Usage Nepoužívejte System.ComponentModel.DescriptionAttribute Informace
MSTEST0032 Usage Kontrola podmínky kontrolního výrazu always-true Informace
MSTEST0033 Suppression Potlačení nenulovatelného odkazu, který není inicializován N/A
MSTEST0034 Usage Použijte TříduCleanupBehavior.EndOfClass Informace
MSTEST0035 Usage Použití DeploymentItem ve spojení s testovací metodou nebo testovací třídou Informace
MSTEST0036 Design Nepoužívejte stínování Výstraha
MSTEST0037 Usage Používejte správné assert metody Informace
MSTEST0038 Usage Vyhněte se použití Assert.AreSame s hodnotovými typy Informace
MSTEST0039 Usage Použití novějších metod Assert.Throws Informace
MSTEST0040 Usage Vyhněte se používání asertů v kontextu asynchronního voidu. Výstraha
MSTEST0041 Usage Použití atributů založených na podmínce s testovací třídou Výstraha
MSTEST0042 Usage Duplicitní datový řádek Výstraha
MSTEST0043 Usage Použití atributu opakování pro testovací metodu Upozornění → Chyba*
MSTEST0044 Design Preferujte TestMethod před DataTestMethod Informace
MSTEST0045 Design Použití kooperativního zrušení pro vypršení časového limitu Informace
MSTEST0046 Usage Místo StringAssert použijte assert. Informace
MSTEST0048 Usage Použití vlastnosti TestContext Výstraha
MSTEST0049 Usage Flow TestContext CancellationToken Informace
MSTEST0050 Usage Globální zkušební zařízení by mělo být platné. Výstraha
MSTEST0051 Usage Assert.Throws by měl obsahovat jeden příkaz. Informace
MSTEST0052 Usage Vyhněte se explicitnímu dynamicDataSourceType Informace
MSTEST0053 Usage Vyhněte se parametrům formátu Assert Informace
MSTEST0054 Usage Použití vlastnosti CancellationToken Informace
MSTEST0055 Usage Nepřehlížejte návratovou hodnotu řetězcové metody. Výstraha
MSTEST0056 Usage TestMethodAttribute by měl správně nastavit DisplayName. Informace
MSTEST0057 Usage TestMethodAttribute by měl šířit informace o zdroji. Výstraha
MSTEST0058 Usage Vyhněte se asercím v blocích catch Informace
MSTEST0059 Usage Správné použití atributu Parallelize Výstraha
MSTEST0060 Usage Duplicitní TestMethodAttribute Výstraha
MSTEST0061 Usage Použití atributu OSCondition místo kontroly za běhu Informace
MSTEST0062 Usage Vyhněte se parametrům metody testu out/ref Výstraha
MSTEST0063 Usage Testovací třída by měla mít platný konstruktor. Výstraha

* Eskalováno na chybu v režimu Recommended a All.

Nástroj MSTESTEXP

Několik rozhraní API MSTest je zdobeno ExperimentalAttribute. Tento atribut označuje, že rozhraní API je experimentální a může být odebráno nebo změněno v budoucích verzích MSTest. Tento atribut slouží k identifikaci rozhraní API, která ještě nejsou stabilní a nemusí být vhodná pro produkční použití.

Diagnostická výstraha MSTESTEXP vás upozorní na používání experimentálního rozhraní API ve vašem kódu. Pokud chcete tuto diagnostiku potlačit pomocí SuppressMessageAttribute, přidejte do projektu následující kód:

using System.Diagnostics.CodeAnalysis;

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

Alternativně můžete tuto diagnostiku potlačit direktivou preprocesoru přidáním následujícího kódu do projektu:

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