Niedawno podjąłem próbę użycia metody Assert.Equals() podczas pisania nowego testu NUnit. Po uruchomieniu ta metoda powoduje wyświetlenie AssertionException
z informacją, że na pierwszy rzut oka jest to trochę kłopotliwe. Co tu się dzieje?NUnit's Assert.Equals zgłasza wyjątek "Assert.Equals nie powinien być używany do zapewnień"
110
A
Odpowiedz
164
Assert
jest klasą statyczną dziedziczącą po System.Object, ponieważ wszystkie klasy zawierają niejawnie w języku C#. System.Object realizuje się następującym sposobem:
static bool Equals(object a, object b)
metody na twierdzić, które są przeznaczone do porównywania równości są metody Assert.AreEqual()
. Dlatego wywołanie metody Object.Equals()
za pośrednictwem klasy Assert w teście jednostkowym jest z pewnością błędem. Aby zapobiec temu błędowi i uniknąć pomyłki, twórcy NUnit celowo ukryli Object.Equals
w klasie Assert z implementacją, która zgłasza wyjątek. Oto realizacja:
/// <summary>
/// The Equals method throws an AssertionException. This is done
/// to make sure there is no mistake by calling this function.
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
[EditorBrowsable(EditorBrowsableState.Never)]
public static new bool Equals(object a, object b)
{
// TODO: This should probably be InvalidOperationException
throw new AssertionException("Assert.Equals should not be used for Assertions");
}
Oczywiście sam komunikat Wyjątkiem jest mylące, ale przynajmniej pozwala wiedzieć zrobiłeś coś złego.
3
tldr;
Assert.AreEqual(a, b); // <-- Compares a, b
nie:
Assert.Equals(a, b); // <-- Irrelevant equality operator on Assert itself
Powiązane problemy
- 1. CollectionAssert.AreEquivalent kontra Assert.Equals()
- 2. NUnit Assert.Equals vs. Assert.AreEqual
- 3. Co to jest użycie Assert.Equals?
- 4. Czy http powinien być używany do kolejnych stron https?
- 5. Czy plik Node.js powinien być używany do intensywnego przetwarzania?
- 6. Czy Git powinien być używany do przechowywania ciągłych kompilacji integracyjnych?
- 7. Jaki typ zawartości powinien być używany do prezentacji XML + XSL?
- 8. FBSession: powinien być używany tylko z jednego wątku
- 9. Który analizator składni mikrodanych powinien być używany w Pythonie
- 10. Kiedy "dev-master" powinien być używany w composer.json?
- 11. junit twierdzenie w wątku zgłasza wyjątek
- 12. Gdzie powinien być startup.m?
- 13. Zapytanie LINQ zgłasza wyjątek InvalidCastException?
- 14. std :: regex konstruktor zgłasza wyjątek
- 15. Formularz się zamyka, gdy nie powinien być
- 16. tworzenie std :: wątek zgłasza wyjątek
- 17. Jaki typ danych serwera SQL powinien być używany do przechowywania bajta []
- 18. Czy NSUserDefault nie powinien być czystym polem do testów jednostkowych?
- 19. XmlAttribute/xmlText nie może być używany do kodowania złożonych typów
- 20. Zgłasza wyjątek, ale kontynuuje śledzenie stosu.
- 21. nokiax zgłasza wyjątek java.lang.RuntimeException: natywny krój pisma nie może być wykonany
- 22. Utylizacja MemoryCache w Finalizerze zgłasza wyjątek AccessViolationException
- 23. C program wyjściowy powinien przejść do konsoli, ale nie powinien być przekierowywany
- 24. Funkcja programu Excel zgłasza wyjątek po ustawieniu przez kod. Działa, gdy jest używany w programie Excel
- 25. StartBluetoothSco() zgłasza wyjątek bezpieczeństwa (BROADCAST_STICKY) na ICS
- 26. SSH.NET przesłać kilka plików asynchronicznie zgłasza wyjątek
- 27. Jaki wyjątek powinienem wyrzucić, gdy uruchamiany jest kod, który nie powinien być uruchamiany?
- 28. „android.view.View nie mogą być oddane do android.view.ViewGroup” wyjątek
- 29. Function-scope konstruktor statycznych obiektu zgłasza wyjątek
- 30. zadeklarować, że metoda zawsze zgłasza wyjątek?
możesz dać nam trochę kontekst takich jak konkretny kod, który był jest? Jakiego rodzaju przedmioty porównywałeś, itp.? –
Przepraszam, ale już znalazłem odpowiedź na tę. Poprosiłem o to, abym mógł zamieścić odpowiedź dla potomności. Kontekst nie jest tak naprawdę ważny, jak zobaczysz, czytając odpowiedź. Mam nadzieję, że ta odpowiedź będzie łatwa do wykrycia za pomocą wyszukiwarki internetowej na wiadomości wyjątku. – Odrade
+1 za uczciwość! – stannius