Kiedy patrzę na przykłady w klasie Assert JavaDoc
assertThat("Help! Integers don't work", 0, is(1)); // fails:
// failure message:
// Help! Integers don't work
// expected: is <1>
// got value: <0>
assertThat("Zero is one", 0, is(not(1))) // passes
Dont widzę dużą przewagę nad, powiedzmy assertEquals( 0, 1 )
.
Może to fajne dla wiadomości, jeśli konstrukcje stają się bardziej skomplikowane, ale czy widzisz więcej zalet? Czytelność?
assertTrue
z rozszerzeniem&&
. Rozdzielenie go na dwa warunki sprawia, że przyczyna problemu jest oczywista nawet w JUnit. Nie zrozum mnie źle; Zgadzam się z tobą, po prostu nie lubię twojego przykładu.Informacje o wydaniu JUnit dla wersji 4.4 (tam, gdzie została wprowadzona) podają cztery zalety:
Bardziej szczegółowa argumentacja od gościa, który stworzył nową składnię: tutaj .
źródło
Zasadniczo w celu zwiększenia czytelności kodu .
Poza hamcrest można również użyć fest twierdzeń . Mają kilka zalet w stosunku do ścięgna podkolanowego, takich jak:
(
assertEquals(123, actual); // reads "assert equals 123 is actual"
vsassertThat(actual).isEqualTo(123); // reads "assert that actual is equal to 123")
Kilka przykładów
Aktualizacja z 17 października 2016 r
Fest nie jest już aktywny, zamiast tego użyj AssertJ .
źródło
Bardzo podstawowym uzasadnieniem jest to, że trudno jest zepsuć nową składnię.
Załóżmy, że po teście określona wartość foo powinna wynosić 1.
--LUB--
Przy pierwszym podejściu bardzo łatwo jest zapomnieć o prawidłowej kolejności i wpisać ją od tyłu. Zamiast mówić, że test się nie powiódł, ponieważ oczekiwał 1 i uzyskał 2, komunikat jest odwrócony. Nie stanowi problemu, gdy test zakończy się pomyślnie, ale może prowadzić do nieporozumień, gdy test się nie powiedzie.
W drugiej wersji popełnienie tego błędu jest prawie niemożliwe.
źródło
Przykład:
btw: możesz też pisać tekst w assertXXX ...
źródło
assertThat
przypadku argument typu string , ponieważ wiadomość, którą otrzymujesz automatycznie, jest równie pouczająca: "Oczekiwano: (wartość większa niż <1> i wartość mniejsza niż <3>)"Jest zbliżony do języka naturalnego.
Łatwiejszy do odczytania, łatwiejszy do analizy kodu. Programista spędza więcej czasu na analizie kodu niż na pisaniu nowego. Jeśli więc kod będzie łatwy do analizy, programista powinien być bardziej produktywny.
Kod PS powinien być równie dobrze napisaną książką. Kod samodokumentowany.
źródło
Istnieją zalety do stwierdzenia, że w porównaniu z assertEquals -
1) bardziej czytelne
2) więcej informacji o niepowodzeniach
3) błędy czasu kompilacji - zamiast błędów czasu wykonania
4) elastyczność przy zapisywaniu warunków testowych
5) przenośny - jeśli używasz hamcrest - możesz użyć jUnit lub TestNG jako podstawową strukturę.
źródło