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”

Wyłączyłem notyfikacje ze Slacka — i nie tylko

Na początku listopada wyłączyłem powiadomienia ze Slacka i osiągnąłem stan, gdy w trakcie pracy na ekran nie wyskakują mi już żadne okienka z komunikatami. Nie zauważyłem, żebym coś przez to przegapiał, a czuję zdecydowaną poprawę koncentracji.

Czytaj dalej „Wyłączyłem notyfikacje ze Slacka — i nie tylko”

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:

  1. dodanie atrybutu „expected” do adnotacji na metodzie testowej: @Test(expected = IllegalStateException.class)
  2. otoczenie kodu blokiem try-catch
  3. 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”

Szybkie prototypowanie backendu z json-serverem

Są sytuacje, gdy piszemy front-end zanim będzie dostępny back-end, lub chcemy postawić lokalną „fałszywą” instancję REST-owego back-endu zwracającą odpowiedzi, nad którymi mamy pełną kontrolę, bez przebijania się przez skomplikowaną logikę przetwarzania prawdziwych danych. Szybką i wygodną opcją jest skorzystanie z pakietu json-server uruchamianego w Node.js i serwowanie danych z pliku.

Czytaj dalej „Szybkie prototypowanie backendu z json-serverem”

Instalacja Kubuntu 18.10 na HP Pavilion Power

Miałem ostatnio naprawdę ciężkie przejścia z wgrywaniem Linuksa na nowym laptopie. Instalowałem wcześniej różne systemy tekstowo i graficznie, problemów ze sprzętem albo aktualizacjami w zainstalowanym „pingwinie” nie miałem od tak dawna, że uwierzyłem, że ten system okrzepł i dojrzał. Jak się okazało — dalej można źle trafić, na przykład tak, że żeby rozwiązać jeden problem, trzeba najpierw rozwiązać zupełnie inny.

Moim wyzwaniem był laptop HP Pavilion Power 15-bc402nw (kod producenta 5GV06EA) — sprzęt na tyle rzadki, że nie mogłem znaleźć jego zdjęć poza katalogowymi producenta (pełno jest zdjęć różnych pokrewnych modeli), ale z drugiej strony posiadający bardzo popularne komponenty. Na przykład kartę graficzną Nvidia GeForce GTX 1050, która jak się okazało była magnesem dla problemów i zmusiła mnie do zapoznania się z parametrem „nomodeset” jądra Linuksa.

Czytaj dalej „Instalacja Kubuntu 18.10 na HP Pavilion Power”

Konferencja Heisenbug Moscow 2018

Konferencja w Rosji – powtórzcie to sobie w myślach i zastanówcie się, jakie skojarzenia pojawiają się w waszych głowach. Czy u nich są w ogóle jakieś konferencje? Nawet jeśli są, to po co człowiek miałby kusić los i pójść na jedną z nich? Tak się składa, że w grudniu pojechałem na Heisenbug do Moskwy – i wróciłem zadowolony. Więcej, konferencja była tak sprawnie zorganizowana i dobrze przemyślana, że moim zdaniem organizatorzy polskich wydarzeń mają się czego uczyć.

Czytaj dalej „Konferencja Heisenbug Moscow 2018”

Migracje w źródłach projektu z użyciem Gradle’a

Gdy rozwijamy nasze projekty, z czasem powstają różne śmieci i zaszłości. W samym kodzie radzimy sobie z bałaganem robiąc od czasu do czasu refaktoring. W bazie danych robimy migracje. Co ze źródłami na naszym dysku?

Czytaj dalej „Migracje w źródłach projektu z użyciem Gradle’a”

Creative Commons License
Except where otherwise noted, the content by Piotr Kubowicz is licensed under a Creative Commons Attribution 4.0 International License.