Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Właściwość | Wartość |
|---|---|
| Identyfikator reguły | MSTEST0003 |
| Tytuł | Metody testowe powinny mieć prawidłowy układ |
| Kategoria | Użycie |
| Poprawka powodująca niezgodność lub niepowodująca niezgodności | Powodująca błąd |
| Domyślnie włączone | Tak |
| Domyślny poziom ważności | Ostrzeżenie (eskalowane do błędu podczas ustawiania MSTestAnalysisMode na Recommended lub All) |
| Wprowadzone w wersji | 3.2.0 |
| czy istnieje poprawka kodu | Tak |
Przyczyna
Metoda testowa nie jest zgodna z wymaganym układem metody testowej.
Opis reguły
Narzędzie MSTest odnajduje metody oznaczone za pomocą [TestMethod], tworzy wystąpienie klasy testowej i wywołuje każdą metodę jako test. Te wymagania umożliwiają modułowi uruchamiającemu dostarczanie danych testowych, obserwowanie błędów i ukończenie cyklu życia testu:
| Requirement | Powód |
|---|---|
Metoda to public, lub internal z [assembly: DiscoverInternals]. |
Metody publiczne stanowią domyślny kontrakt punktu wejścia testu platformy MSTest. Odnajdywanie wewnętrzne jest jawną alternatywą, jeśli testy mają pozostać wewnętrzne w asemblacji. Metody prywatne nie są punktami wejścia dla testów. |
| Typ deklarujący jest dostępny w ramach tych samych reguł odnajdywania. | Metoda publiczna wewnątrz typu niedostępnego nie jest publicznie dostępna. Narzędzie MSTest sprawdza typy zawierające, a także metodę, aby proces odnajdywania stosował spójne zasady widoczności. |
Metoda nie jest static. |
Narzędzie MSTest uruchamia metodę w wystąpieniu, którego konstruktor, TestContext, TestInitialize i TestCleanup należą do tego wykonania testu. Metody instancji mogą używać tego stanu dla każdego testu zamiast współużytkowanego stanu statycznego. |
Metoda nie jest abstract. |
Moduł wykonujący potrzebuje ciała metody do wywołania. Aby udostępnić implementacje testów, zadeklaruj konkretne metody testowe w klasie bazowej i uruchom je za pomocą konkretnych klas testowych. |
| Metoda nie jest generyczna w MSTest 3.7 lub starszym. W programie MSTest 3.8 lub nowszym każdy parametr typu można wywnioskować z podanych danych testowych. | Metoda generyczna wymaga konkretnych argumentów typu, zanim moduł uruchamiający będzie mógł ją wywołać. Wcześniejsze wersje nie wnioskują tych argumentów. Nowsze wersje wywnioskują je z wartości DataRow lub DynamicData, więc nie można wywnioskować parametru typu, który nie występuje w parametrze metody. |
Typem zwracanym jest void, Task lub ValueTask (obsługa ValueTask rozpoczyna się w MSTest 3.3). |
Narzędzie MSTest używa asercji i wyjątków w celu określenia wyniku, a nie zwracanej wartości.
Task i ValueTask pozwalają programowi uruchamiającemu czekać na pracę asynchroniczną, zanim rozpocznie oczyszczanie i zarejestruje wynik. |
Metoda nie jest async void. |
Metoda async void nie zwraca operacji, na którą program MSTest może oczekiwać. Runner nie może niezawodnie czekać na jego asynchroniczną pracę ani skojarzyć późniejszych wyjątków z wynikiem testu. |
| Metoda jest zwykłą metodą, a nie konstruktorem, finalizatorem, akcesorem lub operatorem. | Te specjalne elementy członkowskie mają role zdefiniowane w języku i reguły wywołania. Zwykła metoda zapewnia niezależny punkt wejścia testu, który msTest może wywołać za pomocą argumentów testu. |
Te wymagania opisują kontrakt odkrywania i wywołania narzędzia MSTest, a nie ogólne ograniczenia języka C# ani Visual Basic. Na przykład refleksja może uzyskiwać dostęp do niepublicznych składowych, ale narzędzie MSTest celowo używa powyższych reguł widoczności dla punktów wejścia testowego.
Jak naprawić naruszenia
Upewnij się, że metoda testowa jest zgodna z wymaganym układem opisanym powyżej.
Analizatory MSTest mogą zgłaszać problemy z sygnaturą w edytorze, w tym w kodzie wstawionym przez funkcję IntelliSense. W Visual Studio użyj menu żarówki, aby zastosować dostępną poprawkę kodu. Poprawka kodu pomaga poprawić metodę; nie zmienia szablonów generowania kodu edytora.
Kiedy pomijać ostrzeżenia
Nie pomijaj ostrzeżenia z tej reguły. Nieprawidłowa sygnatura może uniemożliwić odnajdywanie testów lub spowodować niepowodzenie wywołania. Wyłączenie ukrywa diagnostykę, ale nie zmienia sposobu, w jaki MSTest odnajduje metodę i ją uruchamia.
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 MSTEST0003
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0003
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji .
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0003.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia analizy kodu.