assert vs. JUnit Assertions

Dzisiaj widziałem przypadek testowy JUnit z twierdzeniem java zamiast twierdzeń JUnit-czy są znaczące zalety lub wady, aby preferować jedno nad drugim?

Author: Muhd, 2010-06-03

6 answers

W JUnit4 wyjątek (w rzeczywistości błąd) rzucany przez assert JUnit jest taki sam jak błąd rzucany przez słowo kluczowe java assert (AssertionError), więc jest dokładnie taki sam jak assertTrue i poza śladem stosu nie można odróżnić.

To powiedziawszy, twierdzi, że musi działać ze specjalną flagą w JVM, powodując, że wiele testów wydaje się przejść tylko dlatego, że ktoś zapomniał skonfigurować system z tą flagą, gdy testy JUnit były uruchamiane - niedobrze.

Ogólnie, z tego powodu uważam, że używanie JUnit assertTrue jest lepszą praktyką, ponieważ gwarantuje uruchomienie testu, zapewnia spójność (czasami używasz assertThat lub innych twierdzeń, które nie są słowem kluczowym java) i jeśli zachowanie JUnit asserts powinno się zmienić w przyszłości (np. podłączenie do jakiegoś filtra lub innej przyszłej funkcji JUnit), Twój kod będzie w stanie to wykorzystać.

Prawdziwym celem słowa kluczowego assert w Javie jest możliwość wyłączenia go bez uruchamiania kara. To nie dotyczy testów jednostkowych.

 80
Author: Yishai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-29 17:40:45

Preferuję asercje JUnit, ponieważ oferują bogatsze API niż wbudowana Instrukcja assert i, co ważniejsze, nie muszą być jawnie włączone w przeciwieństwie do assert, która wymaga argumentu -ea JVM.

 24
Author: Adamski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-03 13:29:56

Gdy test się nie powiedzie, dostajesz więcej informacji.

assertEquals(1, 2); wyniki w java.lang.AssertionError: expected:<1> but was:<2>

Vs

assert(1 == 2); wyniki w java.lang.AssertionError

Możesz uzyskać jeszcze więcej informacji, jeśli dodasz argument message do assertEquals

 11
Author: starmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-07 14:57:11

Powiedziałbym, że użyj twierdzeń JUnit w testowych przypadkach i użyj twierdzeń Javy w kodzie. Innymi słowy, prawdziwy kod nigdy nie będzie miał zależności JUnit, co jest oczywiste, a jeśli jest testem, powinien używać jego odmian JUnit, nigdy assert.

 5
Author: Bruno D. Rodrigues,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-27 21:36:38

Powiedziałbym, że jeśli używasz JUnit, powinieneś użyć twierdzeń JUnit. assertTrue() jest w zasadzie tym samym co assert, inaczej po co w ogóle używać JUnit?

 0
Author: CheesePls,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-03 13:30:52

Może to nie mieć zastosowania, jeśli używasz wyłącznie rzeczy, które są błyszczące i nowe, ale assert nie został wprowadzony do Javy przed 1.4 SE. Dlatego, jeśli musisz pracować w środowisku ze starszą technologią, możesz skłaniać się ku JUnit ze względu na kompatybilność.

 0
Author: Dan Coates,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-03 14:09:08