JUnit ErrorCollector @Rule z przykładem
W normalnym scenariuszu za każdym razem, gdy podczas wykonywania testu wykryje się jakiś błąd, należy zatrzymać test, naprawić błąd i ponownie uruchomić test.
Ale JUnit ma nieco inne podejście. Z JUnit moduł zbierający błędy, możesz kontynuować wykonywanie testu nawet po wykryciu problemu lub niepowodzeniu testu. Kolektor błędów zbiera wszystkie obiekty błędów i raportuje je tylko raz po zakończeniu wykonywania testu.
Dlaczego warto używać modułu zbierającego błędy?
Pisząc skrypt testowy, chcesz wykonać wszystkie testy, nawet jeśli którykolwiek wiersz kodu zakończy się niepowodzeniem z powodu awarii sieci, niepowodzenia asercji lub z innego powodu. W takiej sytuacji możesz nadal wykonywać skrypt testowy, korzystając ze specjalnej funkcji udostępnianej przez JUnit znany jako „zbieracz błędów”.
Dla tego, JUnit zastosowania Adnotacja @Reguła który służy do tworzenia obiektu modułu zbierającego błędy. Po utworzeniu obiektu modułu zbierającego błędy można łatwo dodać wszystkie błędy do obiektu za pomocą metody addError (błąd, który można zgłosić). Jak wiadomo, to Rzucać to superklasa Wyjątek oraz Błąd klasa w Java. Gdy dodasz błędy w ten sposób, błędy te zostaną zarejestrowane JUnit wynik testu .
Zaletą dodania wszystkich błędów do modułu zbierającego błędy jest możliwość jednoczesnej weryfikacji wszystkich błędów. Ponadto, jeśli skrypt zawiedzie w trakcie, nadal będzie mógł go wykonywać
Note: W przypadku użycia prostego bloku asert lub try/catch użycie metody zbierania błędów nie będzie możliwe.
Przykładowy kod
Aby dowiedzieć się więcej na temat modułu Error Collector, zobacz poniższy przykład kodu, który demonstruje, jak utworzyć obiekt Error Collector i dodać wszystkie błędy w tym obiekcie, aby śledzić problem:
package guru99.junit; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; public class ErrorCollectorExample { @Rule public ErrorCollector collector = new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("There is an error in first line")); collector.addError(new Throwable("There is an error in second line")); collector.checkThat(getResults(), not(containsString("here is an error"))); // all lines of code will execute and at the end a combined failure will be logged in. } }
Czym jest @Rule w jUnit?
JUnit zapewnia specjalny rodzaj obsługi testów, Przypadek testowy lub zestaw testów za pomocą Adnotacja @reguła. Używając @rule, możesz łatwo dodać lub przedefiniować zachowanie testu.
Istnieje kilka wbudowanych reguł udostępnianych przez JUnit API, z którego może skorzystać tester, a nawet Ty możesz napisać własną regułę.
Zobacz poniższy wiersz kodu, który pokazuje, jak używać adnotacji @rule wraz z modułem zbierającym błędy:
@Rule public ErrorCollector collector= new ErrorCollector();
Przykład użycia ErrorCollector
Aby zrozumieć moduł zbierający błędy, utwórzmy klasę i regułę zbierającą wszystkie błędy. Tutaj dodasz wszystkie błędy, używając metody addError(throwable).
Zobacz poniższy kod, który po prostu tworzy regułę, która jest niczym innym jak utworzeniem „obiektu zbierającego błędy”. Który jest dalej używany do dodawania wszystkich błędów, aby na koniec zgłosić problem:
ErrorCollectorExample.java
package guru99.junit; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; public class ErrorCollectorExample { @Rule public ErrorCollector collector = new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("There is an error in first line")); collector.addError(new Throwable("There is an error in second line")); System.out.println("Hello"); try { Assert.assertTrue("A " == "B"); } catch (Throwable t) { collector.addError(t); } System.out.println("World!!!!"); } }
TestRunner.java
Dodajmy powyższą klasę testową do programu uruchamiającego testy i wykonajmy ją, aby zebrać wszystkie błędy. Zobacz poniższy kod:
package guru99.junit; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(ErrorCollectorExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
Wyjście:
Zobacz ślad awarii, który śledzi wszystkie błędy w jednym miejscu:
Korzyści JUnit Kolekcjoner błędów
Możesz użyć JUnit asercja dotycząca walidacji funkcjonalnej lub GUI, np
- AsserEquals(Komunikat tekstowy, Oczekiwany obiekt, Rzeczywisty obiekt), które porównują, czy dwa obiekty są równe.
- PodobnietwierdzenieTrue(warunek logiczny) potwierdza, że warunek jest prawdziwy.
Dzięki asercji test walidacyjny staje się łatwy. Ale jednym z głównych problemów jest to, że wykonywanie testu zostanie zatrzymane, nawet jeśli pojedyncze potwierdzenie zakończy się niepowodzeniem.
Ciągłość testów i obsługa odtwarzania mają kluczowe znaczenie dla powodzenia automatyzacji testów. Error Collector to najlepszy sposób radzenia sobie z tego typu scenariuszami.
Podsumowanie
- Zbieracz błędów Junit umożliwia kontynuowanie testu nawet po znalezieniu pierwszego problemu i niepowodzeniu testu na końcu
- Kolektor błędów zbiera wszystkie obiekty błędów i zgłasza je dopiero po zakończeniu wykonywania testu
- Zaletą dodania wszystkich błędów do modułu zbierającego błędy jest możliwość jednoczesnej weryfikacji wszystkich błędów
- Moduł zbierający błędy po prostu dodaje błędy za pomocą metody addError(throwable err) dostarczonej przez ErrorCollector.java.