Język

MSTEST0088: wstrzykiwanie klasy testowej hosta MSTest nie jest obsługiwane przez wybrany tryb kompilacji

Property Value
Identyfikator reguły MSTEST0088
Title Wstrzykiwanie klasy testowej hosta MSTest nie jest obsługiwane przez wybrany tryb kompilacji
Category Usage
Poprawka jest przełomowa lub nieprzełomowa Non-breaking
Domyślnie włączone Yes
domyślna ciężkość Error
wprowadzone w wersji 4.5.0
Czy istnieje poprawka kodu No

Przyczyna

Włączasz wstrzykiwanie AddMSTestTestClassInjection klasy testowej MSTest należącej do hosta z pakietu eksperymentalnego MSTest.Extensions.Hosting , ale projekt testowy używa nieobsługiwanego trybu kompilacji.

Reguła ma zastosowanie do następujących ustawień:

Tryb kompilacji Setting
Natywne AOT Parametr PublishAot ma wartość true.
kompilacja AOT Parametr RunAOTCompilation ma wartość true.
Generowanie kodu źródłowego MSTest Parametr EnableMSTestSourceGeneration ma wartość true.
Przeglądarkowe WebAssembly TargetPlatformIdentifier to browser, lub RuntimeIdentifier zawiera browser-wasm.

Opis reguły

Wstrzykiwanie klasy testowej należącej do hosta używa aktywacji opartej na refleksji za pośrednictwem metody Microsoft.Extensions.DependencyInjection. Ta ścieżka aktywacji nie obsługuje Native AOT, kompilacji AOT, przeglądarkowego WebAssembly ani generowania kodu źródłowego MSTest.

Analizator zgłasza ten błąd przy wywołaniach AddMSTestTestClassInjection. Rozpoznaje również wstrzykiwanie zarządzane przez hosta włączone za pośrednictwem referencyjnego zestawu, który rejestruje ten proces rejestracji, nawet jeśli projekt testowy nie wywołuje metody bezpośrednio.

Ta reguła jest oddzielona od MSTEST0063, który weryfikuje konstruktory klasy testowej. Prawidłowy konstruktor nie powoduje, że wstrzykiwanie należące do hosta jest zgodne z nieobsługiwanym trybem kompilacji. Eksperymentalny interfejs API generuje również diagnostykę MSTESTEXP . Pomijanie MSTESTEXP nie pomija MSTEST0088 ani nie rozwiązuje niezgodności trybu kompilacji.

Reguła pozostaje włączona jako błąd w każdym MSTestAnalysisMode, w tym None.

Jak naprawić naruszenia

Wybierz jedną z następujących metod:

  • Aby zachować wstrzykiwanie zarządzane przez hosta, użyj obsługiwanego trybu kompilacji. Wyłącz odpowiednie ustawienie AOT lub generowanie źródła albo ustaw jako docelowe środowisko uruchomieniowe inne niż WebAssembly w przeglądarce.
  • Aby zachować wybrany tryb kompilacji, usuń rejestrację AddMSTestTestClassInjection, w tym rejestracje w przywoływanych zestawach konfiguracji hosta. Użyj klas testowych z publicznym konstruktorem bez parametrów lub publicznym konstruktorem, który akceptuje tylko dokładny TestContext parametr.

Nie jest dostępna żadna automatyczna poprawka kodu, ponieważ odpowiednie rozwiązanie zależy od konfiguracji hosta Twojego projektu testowego i wymagań dotyczących wdrożenia.

Kiedy tłumić błędy

Nie wyłączaj tej reguły. Wyłączenie nie powoduje, że iniekcja hosta oparta na odbiciu jest zgodna z wybranym trybem kompilacji.

Pomiń komunikat diagnostyczny

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

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

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

Informacje dodatkowe