Instrukcja Assert W Javie służy do testowania pewnych założeń dotyczących stanu programu podczas jego wykonywania. Pomaga to łatwo wykryć błędy i debugować program. Instrukcja asercji w Javie jest zapisywana przy użyciu słowa kluczowego Java, po którym następuje wyrażenie logiczne. Jeśli wyrażenie ma wartość true, asercja przechodzi bezgłośnie, a program wykonuje swoje zadanie. Jeśli zwróci wartość false, asercja zakończy się niepowodzeniem i zostanie zgłoszony błąd AssertionError . Spójrzmy na przykład programu z asercjami Java.
//Assertion in Java example
public class AssertDemo1 {
public static void main(String[] args) {
int x = 5;
assert x == 5 : "x should be 5";
System.out.println(x);
}
}
Tutaj wyrażenie jest prawdziwe, więc program po prostu kontynuuje swoje zadanie. Wynik jest taki, jak oczekiwano:
5
Przykład AssertionError
W Javie błąd AssertionError jest podklasą klasy Error i jest generowany w przypadku niepowodzenia asercji. Asercje w Javie są zwykle używane do sprawdzania, czy warunki wstępne, warunki końcowe lub niezmienniki są prawdziwe. Jak powiedzieliśmy poniżej, błąd AssertionError jest zgłaszany, gdy stwierdzenie asercji nie daje wartości true. Przepiszmy teraz nasz program tak, aby wyrażenie logiczne było fałszywe.//AssertionError example
public class AssertDemo1 {
public static void main(String[] args) {
int x = 5;
assert x == 7 : "x should be 7";
//here should be AssertionError
System.out.println(x);
}
}
Cóż, uruchamiamy to i wynik jest…
5
Coś zdecydowanie poszło nie tak w naszym przykładzie! Powinniśmy mieć tutaj błąd AssertionError , ponieważ nasz x wynosi 5, a asercja oczekuje, że będzie to 7. Co tu jest nie tak? Należy zauważyć, że asercje Java można po prostu wyłączyć w maszynie JVM, więc nie należy ich używać jako jedynego sposobu sprawdzania błędów w programie. Są przydatne do debugowania i testowania, ale nie należy na nich polegać w przypadku kodu produkcyjnego. Aby więc używać asercji, musisz je włączyć za pomocą opcji vm -ea (lub -enableassertions). Jeśli pracujesz z wierszem poleceń, możesz użyć następnego polecenia dla swojego programu AssertDemo1:
java -ea AssertDemo1
jeśli włączysz twierdzenia i ponownie uruchomisz ten sam program, otrzymasz następny:
Wyjątek w wątku „main” java.lang.AssertionError: x powinno wynosić 7 w AssertDemo1.main(AssertDemo1.java:4)
O to chodzi.
Jak włączyć wyjątki w IntelliJ IDEA
- Przejdź do menu Uruchom → Edytuj konfiguracje....
- Wprowadź parametr -ea w wierszu Opcje maszyny wirtualnej
Asercje do testów jednostkowych w Javie
W Javie testy jednostkowe to technika polegająca na testowaniu poszczególnych modułów kodu, aby upewnić się, że działają poprawnie. Asercje są powszechnie używane w testach jednostkowych w Javie w celu sprawdzenia, czy testowany kod działa zgodnie z oczekiwaniami. W testach jednostkowych jednostka kodu, na przykład konkretna metoda, jest testowana oddzielnie, aby upewnić się, że działa poprawnie w różnych warunkach i danych wejściowych. Weźmy przykład. Tutaj mamy prosty kalkulator do dodawania, odejmowania, mnożenia i dzielenia liczb całkowitych 2.public class MyMath {
public static int add (int a, int b) {
return a + b;
}
public static int sub (int a, int b) {
return a - b;
}
public static int mult (int a, int b) {
return a*b;
}
public static double div (int a, int b) {
return a/b;
}
}
Oczywiście istnieje wiele pytań dotyczących tej implementacji (na przykład, co się stanie, jeśli do innej liczby dodamy największy int), ale na razie pozostawimy tę implementację bez zmian. Napiszmy teraz klasę, w której będziemy testować metody klasy myMath za pomocą testów jednostkowych. To prawda, tylko dwa z nich. W rzeczywistości możesz napisać testy sprawdzające ważność argumentów, czy metoda obsługuje specjalne przypadki i tak dalej. Ale tutaj ograniczymy się do kilku testów w celach demonstracyjnych.
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class MyMathTesting {
@Test
public void testAdd() {
MyMath calculator = new MyMath();
int sum = calculator.add(2, 3);
assertEquals(5, sum);
}
@Test
public void testSub() {
MyMath calculator = new MyMath();
int sub = calculator.sub(5, 2);
assertEquals(3, sub);
}
}
Metoda asertEquals jest asercją sprawdzającą, czy dwie wartości są równe. Jeśli wartości nie są równe, zostanie zgłoszony błąd AssertionError wskazujący, że test się nie powiódł. Używanie asercji w testach jednostkowych może pomóc w wyłapaniu błędów i zapewnieniu, że kod działa poprawnie w różnych warunkach i danych wejściowych. Spróbuj samodzielnie dodać takie testy na dzielenie i mnożenie. To nie jest trudne.
GO TO FULL VERSION