Wprowadzenie do testowania w Javie
Maria Milusheva
Senior Software Engineer
Dwa kluczowe pojęcia:
Jednostka – najmniejsza testowalna część aplikacji, np. metoda
Test jednostkowy – test sprawdzający poprawność pojedynczej „jednostki" kodu w izolacji od pozostałych części aplikacji
Uwagi:
Testy jednostkowe dotyczą małych fragmentów logiki, a nie całości
Inne rodzaje testów obejmują szerszy obraz (np. testy integracyjne)
Nazwa JUnit pochodzi od głównego zastosowania – testów jednostkowych



assertTrue() sprawdza, czy warunek jest prawdziwy: List<String> list = new ArrayList<>();
assertTrue(list.isEmpty()); // No error
assertFalse() sprawdza warunek przeciwny:List<String> list = new ArrayList<>();
list.add("A");
assertFalse(list.isEmpty()); // No error
Zmienne null mogą powodować NullPointerException!
Asercje sprawdzające, czy zmienna jest lub nie jest null – assertNull() i assertNotNull()
Typowy przypadek użycia: sprawdzenie, czy pobrana wartość nie jest null
Map<String, Integer> catalogue = new HashMap<>();
catalogue.put("item1", 10);
// No errors
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
Załóżmy, że chcemy sprawdzić, czy zostanie rzucony wyjątek ArrayIndexOutOfBoundsException:
public String getIndex(String[] array, int index) {
return array[index];
}
JUnit oferuje wiele sposobów na zrobienie tego!
JUnit udostępnia assertThrows(), ale wymaga zaawansowanej składni Java (wyrażenia lambda)
Można użyć assertInstanceOf() w następujący sposób:
try {
getIndex(new String[]{}, 4);
} catch (Exception e) {
// Pass the expected class of the exception and the exception itself
assertInstanceOf(ArrayIndexOutOfBoundsException.class, e);
}
Typowy projekt zawiera setki testów jednostkowych
Powinny być lekkie i łatwe do zrozumienia
Powinny mieć opisowe nazwy, aby od razu wiadomo było, co poszło nie tak w przypadku niepowodzenia
Na przykład: methodUnderTest_expectedBehavior_conditions()
Wprowadzenie do testowania w Javie