Do niedawna nienawidziłem przeklejania kodu do IDE. Nie dlatego, żebym uważał, że prawdziwemu programiście nie wypada robić copy-paste ze Stack Overflow (to bzdura). Cierpiałem na samą myśl, że będę musiał dodać importy do wszystkich użytych w tym fragmencie klas, ponieważ normalnie w IntelliJ jest to niewygodne. Dobra wiadomość: istnieje wbudowana opcja, która pozwala ułatwić sobie życie — ale domyślnie jest wyłączona. W dalszej części pokażę, jak ustawić swoje IDE do wydajnej pracy z importami. Na samym końcu będzie krótka dygresja o modelach mentalnych dla programistów.
Czytaj dalej „Importy nieprzerywające pracy w IntelliJ”Tag: Java
Spring dependencies in Gradle can be tricky
Tym razem artykuł po angielsku — zapraszam na Medium.
Niebezpieczny isEmpty() z utili Springa
Wyobraźmy sobie, że znajdujemy w projekcie taki kod w Javie (lub prawie identyczny — w Kotlinie):
public void assertNoViolations(Collection<ConstraintViolation> violations) { if (!isEmpty(violations)) { throw new IllegalStateException("violates constraints: " + violations); } }
Na oko — kod jak kod, robi co trzeba, nuda. Co może pójść nie tak?
Metoda zgodnie z oczekiwaniami bezproblemowo akceptuje nulla. Rzuca wyjątkiem, gdy przekażemy jej listę zawierającą contraint violations. Jest jeden szkopuł:
assertNoViolations(emptyList());
java.lang.IllegalStateException: violates constraints: []
Jak to jest możliwe?
Czytaj dalej „Niebezpieczny isEmpty() z utili Springa”Testy kontraktowe: Pact bez Pact Brokera
pact-jvm to jeden z dwóch wiodących frameworków do pisania testów kontraktowych dla Javy i JVM. Problemem na wejściu może być znalezienie sposobu na dzielenie się kontraktami: oficjalnie polecanym rozwiązaniem jest serwer Pact Broker, napisany w Rubym. Postawienie serwera trochę ułatwia dostępność obrazu dockerowego, ale wciąż całość wymaga nieco zabawy. Jeśli chcemy na szybko sprawdzić, czy Pact nam się podoba, wolelibyśmy opcję wymagającą minimalnego nakładu pracy.
Tu pojawia się możliwość rzadko wspominana w tutorialach Pacta: wymiana kontraktów przez repozytorium Mavena, nawet takie lokalnie na dysku. Nie potrzebujemy niczego poza narzędziami, które i tak mamy programując w Javie.
Czytaj dalej „Testy kontraktowe: Pact bez Pact Brokera”OWASP Dependency Check
OWASP Dependency Check to plugin do Gradle’a pozwalający zautomatyzować sprawdzanie wykorzystywanych bibliotek pod kątem luk bezpieczeństwa i dobra darmowa alternatywa dla Snyka.
Czytaj dalej „OWASP Dependency Check”ExpectedException i pułapki łapania wyjątków w testach
Pisząc testy we frameworku JUnit 4 mamy kilka opcji na zapisanie warunku, że testowany kod powinien rzucić wyjątkiem. Wymieniając najprostsze, niewymagające dodatkowych bibliotek:
- dodanie atrybutu „expected” do adnotacji na metodzie testowej:
@Test(expected = IllegalStateException.class)
- otoczenie kodu blokiem try-catch
- użycie reguły ExpectedException
Pierwsza opcja wymaga najmniej pisania, ale jest mało elastyczna: nie jesteśmy w stanie zapewnić niczego o wyjątku, jedynie jego klasę. Gdyby przyszła potrzeba upewnienia się, jaki jest komunikat wyjątku, metodę testową trzeba całkowicie przepisać, zmieniając podejście na któreś z opisanych niżej.
Czytaj dalej „ExpectedException i pułapki łapania wyjątków w testach”