MSTEST0036: Nie używaj cieniowania wewnątrz klasy testowej

Właściwość Wartość
Identyfikator reguły MSTEST0036
Tytuł Nie należy używać przesłaniania wewnątrz klasy testowej.
Kategoria Projekt
Poprawka powodująca niezgodność lub niezgodność Nierozdzielający
Domyślnie włączone Tak
Domyślny poziom ważności Ostrzeżenie
Wprowadzone w wersji 3.6.0
czy istnieje poprawka kodu Nie

Przyczyna

Metoda lub właściwość w klasie testowej ukrywa dziedziczony element członkowski zamiast go przesłaniać.

Opis reguły

Ukrywanie składowej powoduje utworzenie oddzielnych składowych o tej samej nazwie. Kod klasy bazowej może używać składowej bazowej, podczas gdy wyszukiwanie składowych w MSTest znajduje składową pochodną, więc dwie części fikstury testowej nie mają już tego samego stanu ani zachowania.

Na przykład właściwość ukryta TestContext może odbierać wstrzykiwany kontekst, podczas gdy kod klasy bazowej nadal odczytuje niezainicjowaną właściwość, powodując NullReferenceException. Ukryte metody cyklu życia lub testowe mogą również zmieniać, która odziedziczona implementacja zostanie uruchomiona. Unikatowe nazwy funkcji pomocniczych lub zamierzone przesłonięcia metod wirtualnych zachowują jawność tego kontraktu.

Jak naprawić naruszenia

Zmień nazwę lub usuń niezamierzony ukryty składnik. Jeśli chcesz uzyskać zachowanie polimorficzne, zastąp wirtualny element członkowski klasy bazowej zamiast go ukrywać.

Kiedy pomijać ostrzeżenia

Pomiń diagnostykę tylko wtedy, gdy ukrywanie elementu członkowskiego jest zamierzone i potwierdzono, że odnajdywanie testów, wywołania zwrotne cyklu życia oraz przypisanie TestContext nadal używają zamierzonych elementów członkowskich. Słowo kluczowe new nie scala dwóch składowych ani nie rozwiązuje ich odrębnego stanu.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

#pragma warning disable MSTEST0036
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0036

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji .

[*.{cs,vb}]
dotnet_diagnostic.MSTEST0036.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia analizy kodu.