Część wspólna zbiorów z Guavą

Szybkie rozwiązanie problemu opisanego tutaj. Mamy dwa zbiory A i B, chcemy sprawdzić, czy wszystkie elementy ze zbioru A są obecne w zbiorze B. Najprościej jest to zrobić w następujący sposób: Listing 1. Wykorzystanie API public class SetsIntersectionExample { public static void main(String[] args) { // Smoki i gołe baby Fairy fairy = Fairy.create(); Set<String> […]

Z Javy 8 na Javę 9, czyli co wybuchnie

Małe rzeczy zawsze cieszą. Jedną z nich jest możliwość bezproblemowego migrowania z Javy 8 na Javę 9. Fajnie by było, gdyby taka migracja przeszła bez większych zgrzytów, dlatego warto czasami rzucić okiem, co wypluwa nam nasz kompilator. A wypluć może on na przykład: Listing 1. Co nam mówi kompilator Warning:(30, 53) java: ‚_’ used as […]

Kiedy wypakować Optional

Odpowiedź brzmi najlepiej nigdy. Pandora już raz rozpakowała Optionala i do dziś dzieci się o tym uczą w szkole. Zresztą można sobie, to opisać w następujący sposób. Tygrys w klatce Wyobraźmy sobie, że mamy do dyspozycji Tygrysa. Niech ma na imię Bonawentura. Listing 1. Nasz tygrys public class Tiger { private final String name; private […]

JUnit 5 – założenia i twierdzenia

Istotą każdego testu jest sprawdzenie jakiegoś twierdzenia. Testy bez asercji są jak porno bez fabuły. Wszystko się jebie i w sumie nie wiadomo dlaczego. Dziś przyjrzymy się jakie możliwości w tym zakresie oferuje nam JUnit 5. Założenia Czyli to, co występuje pod nazwą Assumptions. Mechanizm ten znamy już z poprzedniej wersji frameworku i w nowej […]

JUnit 5 – Rozszerzenia i wstrzykiwanie zależności, część 2

W poprzednim wpisie zajmowaliśmy się standardowymi implementacjami ParameterResolver. Na zakończenie wspomniałem, że własna implementacja wymaga konfiguracji na poziomie silnika testów. Takie podejście jest uciążliwe i wiąże się m.in. z implementacją własnego silnika lub hackowaniem istniejącego. To jest trochę krzywe. Twórcy biblioteki JUnit 5 mając świadomość, że takie rozwiązanie jest kiepskie, przygotowali mechanizm rozszerzeń. Rozszerzenia można […]

JUnit 5 – Rozszerzenia i wstrzykiwanie zależności, część 1

Mechanizm runnerów znany z JUnit 4 był przydatny, ale ograniczony jak prędkość w strefie zamieszkania. Główną wadą był brak możliwości użycia wielu runnerów naraz. Musieliśmy się zdecydować, czy chcemy użyć runnera do Springa, Mockito czy może do parametrów. To był poważny problem. Decydując się na jeden z runnerów, zgadzaliśmy się, na ręczną konfigurację reszty elementów […]

JUnit 5 – Fabryki testów

Czasami samo przekazanie parametrów do testów nie wystarcza. Nie są to sytuacje częste, ale mogą się zdarzyć. Jednym z przykładów niech będzie konieczność pobrania danych testowych z jakiejś bazy danych. Nie posiadamy do dyspozycji żadnego narzędzia, w rodzaju @CsvFileSource. Można takie narzędzie napisać. Dodać rozszerzenie do modułu testów parametryzowanych i będzie OK. Ma ono jednak […]

JUnit 5 – Testy parametryzowane

Sama możliwość wielokrotnego uruchomienia testu, to nie wszystko. W pewnych przypadkach chcielibyśmy, by nasz test został uruchomiony dla różnych zestawów danych. Ma to sens, jeżeli nasze dane wejściowe reprezentują pewien spójny podzbiór przypadków testowych. Mówiąc inaczej mamy dane, które mają sprawdzić jedną ze ścieżek. Listing 1. Każdy test sprawdza jedną ze ścieżek – JUnit 4 […]

JUnit 5 – Testy powtarzalne

Jedną z cech testów jednostkowych jest ich powtarzalność. Najlepiej, jeżeli powtórzenie jest wykonywane automatycznie. Jednak nie o tym dziś będziemy mówić. Czasami pisząc testy, musimy uwzględnić, że nasz kod uruchamiany jest w środowisku wielowątkowym. Nie ma w tym nic nadzwyczajnego. Podobnie jest w przypadku, gdy tworzymy testy, których zadaniem jest jakiegoś kodu w wielu kopiach […]

JUnit 5 – Zagnieżdżanie testów

Samo nazywanie i tagowanie testów nie zawsze jest wystarczające. Szczególnie że oba te mechanizmy są stosunkowo proste. Pozwalają one na organizację testów w pewien logiczny sposób. Nazwy pozwalają na odszukiwanie testów w raportach, z wykorzystaniem przeszukiwania pełnotekstowego. Tagi pozwalają na oznaczanie testów o podobnym znaczeniu w ramach całej aplikacji. Pozwala to na filtrowanie i wybiórcze […]