Reguły użycia MSTest

Reguły użycia obsługują prawidłowe użycie atrybutów, metod i wzorców MSTest. Te reguły przechwytują typowe błędy i zapewniają, że testy są zgodne z wymaganiami i konwencjami platformy.

Reguły w tej kategorii

Identyfikator reguły Title Severity Poprawka dostępna
MSTEST0002 Klasa testowa powinna być prawidłowa. Ostrzeżenie Tak
MSTEST0003 Metoda testowa powinna być prawidłowa. Ostrzeżenie → błąd* Tak
MSTEST0005 Wartość TestContext powinna być prawidłowa. Ostrzeżenie Tak
MSTEST0007 Użyj atrybutu w metodzie testowej. Ostrzeżenie Nie.
MSTEST0008 TestInitialize powinien być prawidłowy. Ostrzeżenie Tak
MSTEST0009 TestCleanup powinien być prawidłowy. Ostrzeżenie Tak
MSTEST0010 ClassInitialize powinno być prawidłowe. Ostrzeżenie Tak
MSTEST0011 ClassCleanup powinien być prawidłowy. Ostrzeżenie Tak
MSTEST0012 Funkcja AssemblyInitialize powinna być prawidłowa. Ostrzeżenie Tak
MSTEST0013 AssemblyCleanup powinien być prawidłowy. Ostrzeżenie Tak
MSTEST0014 Wartość DataRow powinna być prawidłowa. Ostrzeżenie Tak
MSTEST0017 Argumenty asercji należy przekazać w prawidłowej kolejności. Informacje Tak
MSTEST0018 Wartość DynamicData powinna być prawidłowa. Ostrzeżenie Tak
MSTEST0023 Nie neguj asercji logicznej. Informacje Tak
MSTEST0024 Nie przechowuj statycznego elementu TestContext. Ostrzeżenie Nie.
MSTEST0026 Asercji args powinny unikać dostępu warunkowego. Informacje Nie.
MSTEST0030 Typ zawierający metodę testową powinien być klasą testową. Ostrzeżenie Tak
MSTEST0031 Nie używaj elementu System.ComponentModel.DescriptionAttribute. Informacje Tak
MSTEST0032 Przejrzyj warunek potwierdzenia always-true. Informacje Nie.
MSTEST0034 Użyj klasy ClassCleanupBehavior.EndOfClass. Informacje Tak
MSTEST0035 Użyj elementu DeploymentItem z metodą testową lub klasą testową. Informacje Nie.
MSTEST0037 Użyj odpowiednich metod asercyjnych. Informacje Tak
MSTEST0038 Unikaj używania Assert.AreSame z typami wartościowymi. Informacje Tak
MSTEST0039 Użyj nowszych metod Assert.Throws. Informacje Tak
MSTEST0040 Unikaj używania asertów w kontekście async void. Ostrzeżenie Nie.
MSTEST0041 Użyj atrybutów opartych na warunku w klasie testowej. Ostrzeżenie Tak
MSTEST0042 Duplikuj DataRow. Ostrzeżenie Nie.
MSTEST0043 Użyj atrybutu ponawiania próby w metodzie testowej. Ostrzeżenie → błąd* Tak
MSTEST0046 Użyj Assert zamiast StringAssert. Informacje Tak
MSTEST0048 Użycie właściwości TestContext. Ostrzeżenie Nie.
MSTEST0049 Kontekst przepływu TestContext CancellationToken. Informacje Tak
MSTEST0050 Globalne urządzenie testowe powinno być prawidłowe. Ostrzeżenie Tak
MSTEST0051 Assert.Throws powinien zawierać pojedynczą instrukcję. Informacje Tak
MSTEST0052 Unikaj jawnego parametru DynamicDataSourceType. Informacje Tak
MSTEST0053 Unikaj parametrów formatu asertywnego. Informacje Tak
MSTEST0054 Użyj właściwości CancellationToken. Informacje Tak
MSTEST0055 Nie ignoruj wartości zwracanej metody łańcucha znaków. Ostrzeżenie Nie.
MSTEST0056 Parametr TestMethodAttribute powinien poprawnie ustawić wartość DisplayName. Informacje Tak
MSTEST0057 TestMethodAttribute powinien propagować informacje źródłowe. Ostrzeżenie Nie.
MSTEST0058 Unikaj asercji w blokach catch. Informacje Nie.
MSTEST0059 Użyj atrybutu Parallelize poprawnie. Ostrzeżenie Nie.
MSTEST0060 Zduplikowany atrybut TestMethodAttribute. Ostrzeżenie Tak
MSTEST0061 Użyj atrybutu OSCondition zamiast sprawdzania środowiska uruchomieniowego. Informacje Tak
MSTEST0062 Unikaj parametrów metody testu out/ref. Ostrzeżenie Tak
MSTEST0063 Klasa testowa powinna mieć prawidłowy konstruktor. Ostrzeżenie Nie.
MSTEST0064 Preferuj asynchroniczne metody asercji. Informacje Nie.
MSTEST0065 Unikaj elementu Assert.AreEqual w typach kolekcji. Ostrzeżenie Nie.
MSTEST0067 Unikaj synchronicznego blokowania wywołań w kodzie testowym. Informacje (domyślnie wyłączone) Nie.
MSTEST0068 Użyj Assert zamiast CollectionAssert. Informacje Tak
MSTEST0069 Element dziedziczony [TestClass] jest ignorowany przez generator kodu źródłowego MSTest. Ostrzeżenie Nie.
MSTEST0070 [MemberCondition] argumenty powinny być prawidłowe. Ostrzeżenie Nie.
MSTEST0071 Metoda testowa nie powinna określać nazwy wyświetlanej równej jej nazwie. Informacje Tak
MSTEST0072 [AssemblyFixtureProvider] nie jest obsługiwana w przypadku kompilacji z wyprzedzeniem. Ostrzeżenie Nie.
MSTEST0073 Preferuj użycie [ResourceLock] stałej dla klucza zasobu. Informacje Nie.
MSTEST0074 Test, który modyfikuje globalny dla procesu stan, powinien deklarować blokadę zasobu. Informacje Tak
MSTEST0075 Unikaj zmiany bieżącego katalogu w testach równoległych. Informacje Tak
MSTEST0076 Unikaj mutowania kultury całego procesu w testach równoległych. Informacje Nie.
MSTEST0077 Unikaj zakodowanych na stałe lub udostępnionych ścieżek systemu plików w teście równoległym. Informacje Nie.
MSTEST0078 [DependsOn] argumenty powinny być prawidłowe. Ostrzeżenie Nie.
MSTEST0079 Użyj atrybutu ArchitectureCondition zamiast sprawdzania środowiska uruchomieniowego. Informacje Tak
MSTEST0080 Użyj atrybutu CICondition zamiast kontroli środowiska. Informacje Tak
MSTEST0081 [TestFilterProvider] powinien odwoływać się do prawidłowego typu filtru testowego. Ostrzeżenie Nie.
MSTEST0082 Klasa testowa dziedziczy cykl życia lub metodę testową z innej wersji MSTest. Ostrzeżenie Nie.
MSTEST0083 Użyj [ExecutableCondition] zamiast sprawdzania File.Exists przed Process.Start. Informacje Tak

* Przeescalowane do błędu w trybach Recommended i All.

Typowe scenariusze

Sprawdzanie poprawności struktury testów

Upewnij się, że klasy, metody i urządzenia testowe są zgodne z wymaganiami MSTest:

  • MSTEST0002: Wymagania dotyczące układu klasy testowej (na przykład publiczne, niestatyczne).
  • MSTEST0003: Wymagania dotyczące układu metody testowej (⚠zwiększone do poziomu błędu).
  • MSTEST0030: Metody z [TestMethod] muszą znajdować się w [TestClass].
  • MSTEST0063: Sprawdzanie poprawności konstruktora klasy testowej.
  • MSTEST0069: Zastosuj [TestClass] bezpośrednio, aby odnajdywanie wygenerowane przez źródło znalazło klasę.
  • MSTEST0082: zachowaj podstawowe i pochodne klasy testowe w tej samej wersji głównej MSTest.

Metody cyklu życia

Zweryfikuj metody inicjowania i oczyszczania:

  • MSTEST0008: Walidacja TestInitialize.
  • MSTEST0009: Walidacja TestCleanup.
  • MSTEST0010: Sprawdzanie poprawności klasyInitialize.
  • MSTEST0011: Weryfikacja klasyCleanup.
  • MSTEST0012: Weryfikacja AssemblyInitialize.
  • MSTEST0013: Weryfikacja assemblyCleanup.
  • MSTEST0034: Ustaw klasę ClassCleanupBehavior.EndOfClass.
  • MSTEST0050: Globalna walidacja urządzenia testowego.
  • MSTEST0072: Nie używaj dostawców współdzielonych fixtur zestawu w przypadku kompilacji z wyprzedzeniem.
  • MSTEST0082: Skompiluj ponownie dziedziczone metody cyklu życia przy użyciu wersji MSTest projektu testowego.

Testowanie oparte na danych

Upewnij się, że atrybuty danych są prawidłowo używane:

  • MSTEST0007: Atrybuty danych muszą znajdować się w metodach testowych.
  • MSTEST0014: Weryfikacja elementu DataRow.
  • MSTEST0018: Weryfikacja danych dynamicznych.
  • MSTEST0042: Wykrywanie zduplikowanych danych DataRows.
  • MSTEST0052: użyj autowykrywania dla parametru DynamicDataSourceType.
  • MSTEST0062: Unikaj parametrów out/ref.

Pisanie lepszych asercji

Reguły poprawnego i skutecznego użycia asercji:

  • MSTEST0017: Przekaż oczekiwane/rzeczywiste w prawidłowej kolejności.
  • MSTEST0023: nie neguj warunków (użyj bezpośrednio instrukcji Assert.IsFalse).
  • MSTEST0026: Unikaj operatorów warunkowych o wartości null w asercji.
  • MSTEST0032: Przejrzyj warunki zawsze prawdziwe.
  • MSTEST0037: użyj najbardziej odpowiedniej metody asercjowania.
  • MSTEST0038: nie używaj parametru AreSame z typami wartości.
  • MSTEST0039: Użyj polecenia Assert.ThrowsExactly (nowy interfejs API).
  • MSTEST0046: Preferuj asercje nad StringAssert.
  • MSTEST0051: Assert.Throws powinno testować pojedyncze wyrażenie.
  • MSTEST0053: użyj interpolacji ciągów zamiast parametrów formatu.
  • MSTEST0058: Nie umieszczaj asercji w blokach catch.
  • MSTEST0064: Preferuj asynchroniczne metody asercji zamiast blokowania kodu asynchronicznego.
  • MSTEST0065: Unikaj Assert.AreEqual w przypadku typów kolekcji.
  • MSTEST0068: Preferuj Assert ponad CollectionAssert.

Użycie elementu TestContext

Prawidłowe użycie obiektu TestContext:

  • MSTEST0005: Weryfikacja właściwości TestContext.
  • MSTEST0024: nie przechowuj elementu TestContext w polach statycznych.
  • MSTEST0048: Ograniczony dostęp do właściwości w fiksturach.
  • MSTEST0049: Przepływ tokenów anulowania z TestContext.
  • MSTEST0054: użyj właściwości TestContext.CancellationToken.

Wzorce asynchroniczne

Reguły dla kodu testowego asynchronicznego:

  • MSTEST0040: Unikaj asercji w metodach asynchronicznych, które zwracają void.
  • MSTEST0067: Unikaj wywołań Thread.Sleep, Task.Wait i innych wywołań blokujących synchronicznie w kodzie testowym (opt-in).

Bezpieczeństwo testów równoległych

Reguły dotyczące testów uruchamianych równolegle:

  • MSTEST0073: Użyj współdzielonych stałych dla kluczy blokad zasobów.
  • MSTEST0074: Blokuj mutacje stanu globalnego procesu.
  • MSTEST0075: Zablokuj zmiany bieżącego katalogu.
  • MSTEST0076: Unikaj modyfikowania kultury w całym procesie.
  • MSTEST0077: Unikaj udostępnionych ścieżek systemu plików.

konfiguracja testowa

  • MSTEST0031: Użyj odpowiednich atrybutów (a nie System.ComponentModel.Description).
  • MSTEST0035: Użycie elementu deploymentItem.
  • MSTEST0041: Atrybuty warunku muszą znajdować się w klasach testowych.
  • MSTEST0043: Atrybuty ponawiania prób muszą znajdować się w metodach testowych (⚠} eskalowanych do błędu).
  • MSTEST0055: Nie ignoruj wartości zwracanych przez metody łańcuchowe.
  • MSTEST0056: ustaw właściwość DisplayName prawidłowo na metryce TestMethodAttribute.
  • MSTEST0057: Propagacja informacji źródłowych w niestandardowym elemencie TestMethodAttribute.
  • MSTEST0059: Nie używaj zarówno Parallelize, jak i DoNotParallelize.
  • MSTEST0060: Unikaj duplikowania atrybutu TestMethodAttribute.
  • MSTEST0061: użyj atrybutu OSCondition do sprawdzania platformy.
  • MSTEST0070: argumenty [MemberCondition] muszą odwoływać się do istniejących składników.
  • MSTEST0071: nie ustawiaj nazwy wyświetlanej równej nazwie metody testowej.
  • MSTEST0078: Weryfikuj [DependsOn] cele i grafy zależności.
  • MSTEST0079: Użyj ArchitectureCondition zamiast sprawdzania architektury w czasie wykonywania.
  • MSTEST0080: Użyj CICondition zamiast kontroli środowiska.
  • MSTEST0081: Weryfikowanie rejestracji dostawcy filtru testów.
  • MSTEST0082: Wykryj testy dziedziczone i metody cyklu życia skompilowane przy użyciu innej głównej wersji MSTest.
  • MSTEST0083: użyj ExecutableCondition zamiast imperatywnego sprawdzania pliku wykonywalnego.