MSTEST0068: Użyj Assert zamiast CollectionAssert

Property Value
Identyfikator reguły MSTEST0068
Title Użyj Assert zamiast CollectionAssert
Kategoria Zastosowanie
Poprawka jest przełomowa lub nieprzełomowa Non-breaking
Domyślnie włączone Yes
domyślna ciężkość Informacje
wprowadzone w wersji 4.3.0
Czy istnieje poprawka kodu Yes

Uwaga / Notatka

Ta reguła jest dostępna od msTest 4.3.

Przyczyna

Metoda testowa używa CollectionAssert metod zamiast równoważnych Assert metod.

Opis reguły

Większość CollectionAssert metod ma odpowiedniki w Assert systemie, które zapewniają te same funkcje. Należy preferować metody Assert ze względu na spójność, lepszą czytelność, łatwiejsze odnajdywanie oraz zgodność z zachowaniem we wszystkich frameworkach testowych.

Poniższe metody CollectionAssert mają równoważne metody Assert:

  • CollectionAssert.AreEqual(a, b) → Assert.AreSequenceEqual(a, b)
  • CollectionAssert.AreNotEqual(a, b) → Assert.AreNotSequenceEqual(a, b)
  • CollectionAssert.AreEquivalent(a, b) → Assert.AreSequenceEqual(a, b, SequenceOrder.InAnyOrder)
  • CollectionAssert.AreNotEquivalent(a, b) → Assert.AreNotSequenceEqual(a, b, SequenceOrder.InAnyOrder)
  • CollectionAssert.AllItemsAreNotNull(a) → Assert.AreAllNotNull(a)
  • CollectionAssert.AllItemsAreUnique(a) → Assert.AreAllDistinct(a)
  • CollectionAssert.AllItemsAreInstancesOfType(collection, typeof(T)) → Assert.AreAllOfType<T>(collection)
  • CollectionAssert.Contains(collection, value) → Assert.Contains(value, collection)
  • CollectionAssert.DoesNotContain(collection, value) → Assert.DoesNotContain(value, collection)

Warning

Podczas migracji z CollectionAssert do Assert należy uważać na zmianę kolejności parametrów w Contains, DoesNotContain i AllItemsAreInstancesOfType. W Assertsystemie oczekiwana wartość jest zawsze pierwszym parametrem.

Przeciążenia AreEqual/AreNotEqual, które przyjmują IComparer, są pomijane, ponieważ Assert.AreSequenceEqual oczekuje IEqualityComparer<T> (inna semantyka). Przeciążenia AreEquivalent/AreNotEquivalent, które przyjmują IEqualityComparer<T>, są również pomijane. IsSubsetOf / IsNotSubsetOf nie mają obecnie bezpośredniego Assert odpowiednika i nie są obsługiwane.

Jak naprawić naruszenia

Użyj dostarczonego narzędzia do poprawiania kodu, aby automatycznie zastąpić wywołania metod CollectionAssert ich odpowiednikami Assert. Możesz również ręcznie zamienić wywołania metody w razie potrzeby.

Kiedy pomijać ostrzeżenia

Nie ignoruj ostrzeżeń z tej zasady. Metody Assert zapewniają tę samą funkcjonalność z lepszą spójnością.

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

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

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

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