| Tytuł: | Techniki efektywnego testowania kodu dla programistów Java (Spock/JUnit 5) |
| Kod: | craft-test-effective |
| Kategoria: | Testowanie automatyczne |
| Forma: | 50% wykłady / 50% warsztaty |
| Czas trwania: | 3-5 dni |
| Odbiorcy: | developerzy |
| Zapisy: |
Indywidualne zamówienie i dopasowanie dla grupy. |
| Logistyka: |
W siedzibie klienta lub w innym dowolnym miejscu. |
Podczas szkolenia uczestnicy poznają techniki programowania i testowania ułatwiające codzienną pracę z kodem.
Podczas warsztatów praktycznych uczestnicy posiądą umiejętność pisania i utrzymywania testów oraz pracy techniką Test-Driven Development oraz nowoczesnych narzędzi (Spock Framework lub JUnit 5).
Przedstawiona propozycja programu przy szerokim potraktowaniu wszystkich zagadnień przekracza zaproponowane ramy czasowe. Wcześniej przeprowadzone szkolenia potwierdzają, iż różne elementy szkolenia mogą być mnie lub bardziej istotne dla konkretnej grupy uczestników w zależności od specyfiki pracy, doświadczenia, czy posiadanej już znajomości rozwiązań. Dlatego też po zaakceptowaniu oferty konieczne będzie ustalenie nacisku, jaki ma być położony na poszczególne części szkolenia.
Materiały wstępne
Przed szkoleniem możesz zapoznać się z serią naszych artykułów: Testowanie automatyczne.
Wyróżniki szkolenia
- Tworzenie skutecznych i łatwych w utrzymaniu testów automatycznych
- Najlepsze wzorce i praktyki (w tym TDD)
- Sensowne testowanie integracyjne (ze Spring Framework)
- Testowanie na poziomie API mikroserwisów (Consumer Driven Contract - CDC)
- Techniki pracy z kodem legacy (opcjonalnie)
- Praca z nowoczesnymi narzędziami do testowania - do wyboru Spock Framework lub JUnit 5
Program Szkolenia
Program jest ramą w jakiej możemy się poruszać merytorycznie - program dla konkretnego szkolenia dedykowanego ustalamy z grupą na podstawie analizy przed-szkoleniowej.-
Jednostkowe testowanie kodu- Dlaczego warto automatycznie testować kod
- Dobre testy jednostkowe - FIRST
- Struktura testów jednostkowych (given-when-then/arrange-act-assert)
- Nazewnictwo testów (metod testowych)
- Konstrukcje wspierające testowalność kodu (m.in. dziedziczenie -> kompozycja, małe klasy, wstrzykiwanie zależności)
- Antywzorce dla testowalnego kodu (m.in. singletony, elementy statyczne, pola i metody final)
- Zadania frameworku testowego
- Formułowanie naturalnie wyglądających asercji (AssertJ)
- Ćwiczenia praktyczne (w trakcie - przeplatane z teorią)
- Dlaczego warto automatycznie testować kod
-
Spock Framework - pisanie testów szybciej, zwięźlej i czytelniej (alternatywnie JUnit 5)- Nowa jakość w testowaniu kodu - dlaczego warto poznać Spocka
- Konstrukcje i techniki upraszczające kod testowy (Groovy w pigułce na potrzeby pisania testów)
- Podział testu na bloki/sekcje
- Testy parametryzowane
- Testowanie wyjątków
- Warunkowe wykonywanie testów
- Inicjowanie i sprzątanie w testach
- Porównanie trio JUnit/Mockito/AssertJ ze Spockiem
- Ćwiczenia praktyczne (w trakcie - przeplatane z teorią)
- Nowa jakość w testowaniu kodu - dlaczego warto poznać Spocka
-
Test Driven Development- Historia TDD
- Podstawowe założenia
- Cykl red-green-refactor
- Przejrzysta struktura testu
- Wybór kolejnych funkcji do zaimplementowania
- Sprawne uruchamianie testów z IDE (przydatne wtyczki, skróty klawiaturowe)
- Ćwiczenia praktyczne z TDD w formie Kata/Coding Dojo
- Korzyści ze stosowania TDD
- Historia TDD
-
Bezpieczny refaktoring- Przydatne przekształcenia kodu (refaktoring)
- Automatyczny refaktoring w IDE z użyciem skrótów klawiaturowych (Idea lub Eclipse)
- Ćwiczenia praktyczne
- Przydatne przekształcenia kodu (refaktoring)
-
Separacja od obiektów współpracujących- Potrzeba, kiedy i dlaczego warto
- Testowe zastępniki obiektów współpracujących (ang. test doubles)
- Mockowanie ze Spock Framework
- Mockowanie z Mockito (mocki w Spocku mają swoje ograniczenia)
- Ćwiczenia praktyczne (w trakcie - przeplatane z teorią)
- Potrzeba, kiedy i dlaczego warto
-
Testowanie integracyjne aplikacji opartej o Spring Framework- Dlaczego tylko testy jednostkowe nie wystarczą
- Wsparcie w JUnit/JUnit 5/Spock/TestNG
- Konfiguracja i zarządzanie kontekstem Springa
- Wstrzykiwanie zależności
- Odcinanie zależności w kontekście Springa (wstrzykiwanie zależności testowych, w tym mocków)
- Ręczne tworzenie kontekstu w teście (do testowania specyficznych przypadków)
- Cache'owanie kontekstu między testami (i problemy z tym związane)
- Wydzielanie wspólnej konfiguracji dla wielu testów
- Ćwiczenia praktyczne (w trakcie - przeplatane z teorią)
- Dlaczego tylko testy jednostkowe nie wystarczą
-
Testowanie aplikacji Spring MVC- Testowanie kontrolerów w Spring MVC bez kontenera serwletów
- Pełne testy integracyjne z kontenerem serwletów
- Mockowanie wywołań do zewnetrznych serwisów (WireMock)
- Testowanie asynchronicznych wywołań HTTP
- Ćwiczenia praktyczne (w trakcie - przeplatane z teorią)
- Testowanie kontrolerów w Spring MVC bez kontenera serwletów
-
Testowanie z bazą danych- Rozwiązywanie problemów z zależnościami między testami
- Zarządzanie transakcjami bazodanowymi w testach
- Utrzymywanie zestawu danych testowych
- Testowanie z bazą danych w pamięci
- Kiedy warto mockować warstwę dostępu do bazy danych
- Ćwiczenia praktyczne (w trakcie - przeplatane z teorią)
- Rozwiązywanie problemów z zależnościami między testami
-
Wybrane tematy z testowania akceptacyjnego- Wstęp do BDD (Behavior-Driven Development)
- Kryteria akceptacyjne (w Cucumber lub JBehave)
- Techniczne aspekty testowania GUI
- Web Driver/Selenium 2 + GEB
- Testowanie asynchronicznych elementów strony
- Łatwiejsze utrzymywanie testów GUI z Page Object Pattern
- Web Driver/Selenium 2 + GEB
- Architektura microserwisów i wprowadzenie do Consumer Driven Contract (Spring Cloud Contract)
- Ćwiczenia praktyczne (w trakcie - przeplatane z teorią)
- Wstęp do BDD (Behavior-Driven Development)
-
(Opcjonalnie) Praca z odziedziczonym kodem (legacy code)- Czym jest, dlaczego powstaje i jak temu przeciwdziałać
- Techniki rozbijania zależności
- Techniki testowania
- Techniki refaktoryzacji
- Przydatne narzędzia
- Ćwiczenia praktyczne
- Czym jest, dlaczego powstaje i jak temu przeciwdziałać
-
Zaawansowane zagadnienia- Techniki testowania asynchronicznych wywołań (Awaitility, Spock)
- Badanie jakości testów z testowaniem mutacyjnym (PIT)
- Techniki przyśpieszania testów
- Uproszczenie niektórych aspektów testowania z Java 8
- Zaawansowany Spock (lub JUnit 5)
- Tworzenie własnych rozszerzeń
- Tworzenie własnych rozszerzeń
- Techniki testowania asynchronicznych wywołań (Awaitility, Spock)
Pobierz program w formacie PDF
Trenerzy
Poznaj ekspertów, którzy mogą poprowadzić Twoje szkolenie.