MSTEST0073: Preferuj użycie stałej jako klucza zasobu „[ResourceLock]”

Property Value
Identyfikator reguły MSTEST0073
Tytuł Preferuj stałą dla klucza zasobu "[ResourceLock]"
Kategoria Usage
Poprawka jest przełomowa lub nieprzełomowa Non-breaking
Domyślnie włączone Tak
domyślna ciężkość Informacje
wprowadzone w wersji 4.4.0
Czy istnieje poprawka kodu Nie

Przyczyna

Atrybut [ResourceLock] przekazuje swój klucz zasobu jako surowy literał ciągu zamiast odwoływać się do współdzielonej stałej.

Opis reguły

[ResourceLock] Dopasuje testy według dokładnej równości ciągu z uwzględnieniem wielkości liter klucza zasobu. Użycie zwykłego literału łańcuchowego jest zawodne: literówka powoduje powstanie innego klucza, więc kolidujące testy nie są już wykonywane sekwencyjnie i po cichu wchodzą ze sobą w wyścig zamiast zakończyć się błędem kompilacji. Odwoływanie się do współdzielonej stałej, takiej jak składowa WellKnownResources lub własna const, sprawia, że literówki stają się błędami kompilacji, i pozwala kompilatorowi dopilnować, aby każdy test współzawodniczący o ten sam zasób używał tego samego klucza.

[ResourceLock("database")] // Violation: bare string literal.
[TestMethod]
public void ReadsSharedSchema() { }

Jak naprawić naruszenia

Odwołaj się do składowej WellKnownResources, aby uzyskać globalny stan procesu, lub zadeklaruj i odwołaj się do własnej składowej const string.

private const string Database = "database";

[ResourceLock(Database)]
[TestMethod]
public void ReadsSharedSchema() { }

Kiedy pomijać ostrzeżenia

Można bezpiecznie zignorować to ostrzeżenie, jeśli celowo używasz literałowego klucza zasobu i masz pewność, że żaden inny test w aseblacji nie musi synchronizować się względem tego samego zasobu.

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

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

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

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

Zobacz także