Poprawny Git commit message w IntelliJ

Pisanie commitów Gita wymaga zachowania pewnego savoir-vivre’u. Nie jest to powszechna wiedza, ale od czego mamy IDE? Oprócz wyłapywania potencjalnych błędów w kodzie mogłoby też kontrolować tekst wpisywany przy commicie. IntelliJ Idea (oraz WebStorm itp.) potrafi takie rzeczy — ale musimy włączyć odpowiednią opcję.

Czytaj dalej „Poprawny Git commit message w IntelliJ”

3 najbardziej pouczające materiały z 2019

Styczeń to na różnych stronach i blogach okres publikowania podsumowań minionego roku. Miałem zamiar napisać artykuł w stylu „3 najlepsze książki programistyczne, jakie przeczytałem w 2019”, ale okazało się, że nie zbiorę trzech: musiałbym albo zaproponować rzeczy, z których nie byłem w pełni zadowolony, albo książki niezwiązane ściśle z branżą IT. Zamiast tego mogę zaproponować 3 rzeczy związane z programowaniem, ale niekoniecznie wydrukowane na papierze: jedną książkę, jedną publikację w sieci i jedno nagranie wideo.

Czytaj dalej „3 najbardziej pouczające materiały z 2019”

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”
Creative Commons License
Except where otherwise noted, the content by Piotr Kubowicz is licensed under a Creative Commons Attribution 4.0 International License.