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 | MSTEST0018 |
| Tytuł | Wartość DynamicData powinna być prawidłowa |
| Kategoria | Użycie |
| Poprawka powodująca niezgodność lub niepowodująca niezgodności | Nienaruszający zgodności |
| Domyślnie włączone | Tak |
| Domyślny poziom ważności | Ostrzeżenie |
| Wprowadzone w wersji | 3.6.0 |
Przyczyna
Metoda oznaczona elementem [DynamicData] powinna mieć prawidłowy układ.
Opis reguły
[DynamicData] nazywa element członkowski, który dostarcza przypadki testowe. MSTest rozpoznaje ten składowy, wylicza jego wiersze i przekazuje każdy wiersz do metody testowej. analizator wychwytuje problemy z wyszukiwaniem składowych i sygnaturą, zanim napotka je moduł uruchamiający.
Narzędzie MSTest może wyliczać dane podczas odnajdywania, zanim utworzy wystąpienie testowe lub uruchomi inicjację poszczególnych testów. W związku z tym źródło danych nie może polegać na tych krokach przy dostarczaniu swoich wierszy.
| Wymaganie dotyczące źródła danych | Powód |
|---|---|
Zastosuj [DynamicData] do metody oznaczonej atrybutem [TestMethod] lub atrybutem dziedziczącym. |
Atrybut danych dostarcza argumenty; nie deklaruje punktu wejścia dla testu. |
| Odwołuj się do istniejącej, jednoznacznej składowej określonego typu lub bieżącej klasy, jeśli nie określono żadnego typu. | Narzędzie MSTest określa składową według nazwy. Brakujący lub niejednoznaczny składnik uniemożliwia modułowi uruchamiającemu uzyskanie oczekiwanych danych testowych. |
Dopasuj typ składowej do określonego DynamicDataSourceType, lub użyj AutoDetect w wersjach, które go obsługują. |
Narzędzie MSTest musi wiedzieć, czy wywołać metodę, odczytać właściwość, czy odczytać pole, aby uzyskać wiersze. |
| Użyj składowej statycznej i niegenerycznej metody źródła danych. | Źródło musi być wywoływalne bez argumentów typu dla instancji testowej ani metody. |
Użyj metody bez parametrów lub w programie MSTest 3.10 lub nowszym podaj pasujące argumenty źródła danych za pomocą [DynamicData]. |
Moduł uruchamiający dostarcza tylko argumenty źródła danych określone przez atrybut, a nie dowolne wartości ani wartości testu TestContext. |
| Zwraca kolekcję obsługiwanych wierszy danych testowych. | Narzędzie MSTest iteruje po źródle i wiąże każdy wiersz z parametrami metody testowej. Struktura rekordu musi przyjmować zgodne argumenty. Typowe typy zwracane obejmują IEnumerable<object[]>, IEnumerable<Tuple<...>> i IEnumerable<ValueTuple<...>>. |
Aby uzyskać informacje o obsługiwanych typach wierszy i sparametryzowanych źródłach, zobacz DynamicDataAttribute. Aby uzyskać informacje na temat automatycznego wykrywania typu składowej członkowskiej, zobacz MSTEST0052.
Jeśli określisz niestandardową składową display-name, musi ona spełniać oddzielny kontrakt funkcji callback:
| Wymaganie dotyczące nazwy wyświetlanej | Powód |
|---|---|
| Wskaż istniejącą, jednoznaczną metodę dla określonego typu. | Narzędzie MSTest musi ustalić jedną funkcję wywołania zwrotnego, która formatuje nazwę, a nie właściwość lub niejednoznaczne przeciążenie. |
| Użyj metody publicznej, statycznej, niegenerycznej. | MSTest wywołuje formater bezpośrednio bez instancji klasy testowej ani argumentów typu dla metody. |
Wróć do string. |
Wywołanie zwrotne dostarcza nazwę czytelną dla człowieka służącą do identyfikowania przypadku testowego. |
Wykonaj dokładnie dwa parametry: MethodInfo a następnie object[]. |
Narzędzie MSTest dostarcza metodę testową i wartości bieżącego wiersza, dzięki czemu formater może odróżnić poszczególne przypadki testowe. |
Przykład:
public static string GetDisplayName(MethodInfo methodInfo, object[] data)
{
return string.Format("{0} ({1})", methodInfo.Name, string.Join(",", data));
}
Jak naprawić naruszenia
Upewnij się, że atrybut jest zgodny z warunkami opisanymi powyżej.
Kiedy wyłączać ostrzeżenia
Nie wyciszaj ostrzeżenia generowanego przez tę regułę. Jeśli zignorujesz tę regułę, oflagowane wystąpienia zostaną pominięte lub spowodują błąd czasu wykonywania.
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 MSTEST0018
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0018
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji .
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0018.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia analizy kodu.