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?
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.
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.
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
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.
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?
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ść.
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