MSTEST0018: DynamicData powinno być prawidłowe

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.