MSTEST0072: "[AssemblyFixtureProvider]" nie jest obsługiwany w przypadku kompilacji z wyprzedzeniem

Property Value
Identyfikator reguły MSTEST0072
Tytuł Element "[AssemblyFixtureProvider]" nie jest obsługiwany podczas kompilacji z wyprzedzeniem
Kategoria Usage
Poprawka jest przełomowa lub nieprzełomowa Non-breaking
Domyślnie włączone Tak
domyślna ciężkość Warning
wprowadzone w wersji 4.4.0
Czy istnieje poprawka kodu Nie

Przyczyna

Projekt używa elementu [AssemblyFixtureProvider] bezpośrednio lub za pośrednictwem biblioteki, do której projekt się odwołuje, podczas publikowania z użyciem Native AOT (PublishAot) lub Blazor WebAssembly AOT (RunAOTCompilation).

Opis reguły

[AssemblyFixtureProvider] odkrywanie przechodzi przez graf odwołań zestawów środowiska uruchomieniowego, co wymaga, aby środowisko uruchomieniowe generowało kod dynamiczny. Warianty kompilacji wyprzedzającej, takie jak Native AOT i Blazor WebAssembly AOT, nie mogą generować kodu dynamicznego, więc środowisko uruchomieniowe po cichu pomija wykrywanie, a metody fikstury testowej [AssemblyInitialize]/[AssemblyCleanup] nigdy nie są wykonywane.

// Violation: ignored at run time under Native AOT / Blazor WebAssembly AOT.
[assembly: AssemblyFixtureProvider(typeof(SharedFixtures))]

Analizator zgłasza tę diagnostykę niezależnie od tego, czy atrybut został zastosowany w bieżącej kompilacji, czy w zestawie, do którego istnieje odwołanie, ponieważ w obu przypadkach projekt testowy Native AOT, który z niego korzysta, po cichu traci swoje elementy fixture zestawu.

Jak naprawić naruszenia

Zadeklaruj metody [AssemblyInitialize] i [AssemblyCleanup] bezpośrednio w asemblacji testowej, zamiast polegać na współdzielonej bibliotece [AssemblyFixtureProvider].

public static class Fixtures
{
    [AssemblyInitialize]
    public static void Init(TestContext context) { }
}

Kiedy pomijać ostrzeżenia

Nie wyciszaj ostrzeżeń z tej reguły dla projektu, który jest faktycznie publikowany przy użyciu Native AOT lub Blazor WebAssembly AOT, ponieważ metody fixture nie zostaną uruchomione, a stan, który konfigurują, nie będzie dostępny podczas testów. Pomijanie jest uzasadnione tylko wtedy, gdy konfiguracja opublikowana przez usługę AOT nie uruchamia testów, których dotyczy problem.

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 MSTEST0072
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0072

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

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

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

Zobacz także