- nowość
Test-Driven Development w C# i .NET. Tworzenie wysokiej jakości kodu w architekturze DDD za pomocą znanych narzędzi i bibliotek - ebook
Test-Driven Development w C# i .NET. Tworzenie wysokiej jakości kodu w architekturze DDD za pomocą znanych narzędzi i bibliotek - ebook
Spośród wielu koncepcji tworzenia oprogramowania na szczególną uwagę zasługuje model programowania sterowanego testami - TDD. Zastosowanie podejścia TDD ułatwia utrzymanie wysokiej jakości kodu. Technika ta opiera się na dodawaniu funkcjonalności do produktu dopiero po utworzeniu i przeprowadzeniu testów jednostkowych. TDD coraz częściej jest wyborem szanowanych firm programistycznych.
W tej praktycznej książce przedstawiono zasady TDD na rzeczywistych przykładach z użyciem popularnych frameworków, takich jak ASP.NET Core i Entity Framework. Po zapoznaniu się z solidnym wprowadzeniem do koncepcji TDD dowiesz się, jak można używać Visual Studio 2022 do tworzenia aplikacji internetowej z wykorzystaniem Entity Framework, a także baz danych SQL Server i Cosmos DB. Nauczysz się też korzystać z różnych wzorców, takich jak repozytorium, usługi i budowniczy. Ponadto omówiono tu architekturę DDD i inne najlepsze praktyki stosowane podczas tworzenia oprogramowania, w tym reguły SOLID i wskazówki FIRSTHAND. Nie zabrakło przydatnych uwag o biznesowych aspektach podejścia TDD.
W książce między innymi:
- testy jednostkowe i mechanizm wstrzykiwania zależności
- NSubstitute: imitacje i dublery używane podczas testów
- zastosowanie TDD dla ASP.NET API, Entity Framework i baz danych
- tworzenie potoków ciągłej integracji za pomocą GitHub
- zaawansowane scenariusze używania imitacji
- korzyści z wdrażania podejścia TDD przez zespoły i firmy
TDD wprowadza dobre praktyki i doskonali programistę!
Spis treści
Część I. Rozpoczęcie pracy i podstawy TDD
Rozdział 1. Przygotowanie pierwszej implementacji TDD
- Wymagania techniczne
- Wybór zintegrowanego środowiska programistycznego
- Microsoft Visual Studio
- JetBrains Rider
- Visual Studio Code
- Wersje .NET i C#
- Utworzenie szkieletu rozwiązania razem z testami jednostkowymi
- Wymagania
- Utworzenie szkieletu projektu
- Zapoznanie się z wbudowanymi narzędziami przeznaczonymi do przeprowadzania testów
- Implementacja wymagań z zastosowaniem programowania sterowanego testami
- SUT
- Klasa testów
- Warunki i oczekiwania
- Czerwony - zielony
- Wzorzec AAA
- Jeszcze więcej testów
- Podsumowanie
- Dalsza lektura
Rozdział 2. Wprowadzenie do mechanizmu wstrzykiwania zależności
- Wymagania techniczne
- Aplikacja WFA
- Utworzenie przykładowej aplikacji
- Dodawanie komponentu odpowiedzialnego za dostarczanie rzeczywistej prognozy pogody
- Poznawanie mechanizmu wstrzykiwania zależności
- Typy abstrakcyjne i konkretne
- Czym jest zależność?
- Znaczenie zależności
- Definiuj zależności od abstrakcji, a nie od konkretnej implementacji
- Wprowadzenie do mechanizmu wstrzykiwania zależności
- Pierwszy przykład wstrzykiwania zależności
- Testowanie API
- Czym jest szew?
- Odwrócenie kontroli
- Używanie kontenerów wstrzykiwania zależności
- Rola kontenera
- Kontenery podmiotów zewnętrznych
- Cykl życiowy usługi
- Refaktoryzacja pod kątem wstrzykiwania zależności
- Rzeczywisty scenariusz użycia wstrzykiwania zależności
- Wstrzykiwanie metody
- Wstrzykiwanie właściwości
- Lokalizator usługi
- Podsumowanie
- Dalsza lektura
Rozdział 3. Rozpoczęcie pracy z testami jednostkowymi
- Wymagania techniczne
- Wprowadzenie do testów jednostkowych
- Czym jest testowanie jednostkowe?
- Frameworki testów jednostkowych
- Wyjaśnienie struktury projektu stosującego testy jednostkowe
- Dodawanie projektu xUnit za pomocą wiersza poleceń
- Konwencje nazw w projekcie testów jednostkowych
- Wykonanie przykładowego testu jednostkowego
- Okno Test Explorer
- Analiza anatomii klasy testu jednostkowego
- Konwencja nadawania nazwy klasie
- Metody testowe
- Wzorzec "przygotowanie, działanie, asercja"
- Testowany system
- Omówienie podstaw frameworka xUnit
- Atrybuty Fact i Theory
- Wykonywanie testów
- Klasa Assert
- Klasa Record
- Omówienie powiązań zachodzących między regułami SOLID a testami jednostkowymi
- Reguła jednej odpowiedzialności
- Reguła otwarte-zamknięte
- Zasada podstawień Barbary Liskov
- Zasada rozdzielania interfejsów
- Zasada odwrócenia zależności
- Podsumowanie
- Dalsza lektura
Rozdział 4. Rzeczywiste stosowanie testów jednostkowych z wykorzystaniem dublerów używanych podczas testów
- Wymagania techniczne
- Wprowadzenie do koncepcji dublerów używanych podczas testów
- Typy dublerów używanych podczas testów
- Którego rozwiązania należy używać w programowaniu sterowanym testami?
- Omówienie kolejnych kategorii testów
- Testy integracyjne
- Testy sintegration
- Testy akceptacyjne
- Wybór kategorii testów
- Podsumowanie
- Dalsza lektura
Rozdział 5. Programowanie sterowane testami
- Wymagania techniczne
- Filary programowania sterowanego testami
- Najpierw testy
- Czerwony, zielony, refaktoryzacja
- Programowanie sterowane testami w praktyce
- Utworzenie rozwiązania w wierszu poleceń
- Dodawanie zadania programistycznego
- Krótkie podsumowanie
- Najczęściej zadawane pytania i zastrzeżenia do programowania sterowanego testami
- Dlaczego potrzebne jest programowanie sterowane testami? Czy nie można po prostu używać testów jednostkowych?
- Podejście w stylu TDD podczas tworzenia oprogramowania wydaje się nienaturalne
- Stosowanie programowania sterowanego testami będzie nas spowalniać
- Czy programowanie sterowane testami ma znaczenie dla startupów?
- Nie lubię programowania sterowanego testami i wolę najpierw zająć się swoją bazą kodu
- Testy jednostkowe nie sprawdzają rzeczywistych aspektów kodu
- Podobno istnieją dwie szkoły w zakresie programowania sterowanego testami - londyńska i klasyczna. Jakie są między nimi różnice?
- Dlaczego niektórzy programiści nie lubią testów jednostkowych i programowania sterowanego testami?
- Jaki związek zachodzi między programowaniem sterowanym testami a programowaniem ekstremalnym?
- Czy system jest w stanie przetrwać bez programowania sterowanego testami?
- Programowanie sterowane testami i testy sintegration
- Testy sintegration jako alternatywa dla testów jednostkowych w programowaniu sterowanym testami
- Wyzwania pojawiające się podczas stosowania testów sintegration
- Podsumowanie
- Dalsza lektura
Rozdział 6. Wskazówki FIRSTHAND dotyczące programowania sterowanego testami
- Wymagania techniczne
- Wskazówka "pierwszy"
- Później oznacza nigdy
- Przygotowanie do użycia mechanizmu wstrzykiwania zależności
- Opracowanie z perspektywy klienta
- Promowanie testowania sposobu działania
- Eliminowanie fałszywych alarmów
- Eliminowanie kodu spekulatywnego
- Wskazówka "intencja"
- NazwaMetody_Warunek_Oczekiwanie
- NazwaMetody_Should_When
- Struktura testu jednostkowego
- Wskazówka "czytelność"
- Inicjalizacja konstruktora testowanego systemu
- Wzorzec budowniczego
- Wskazówka "jeden sposób działania"
- Czym jest sposób działania?
- Przykład sposobu działania
- Testowanie jedynie zewnętrznie zdefiniowanego sposobu działania
- Dlaczego nie testujemy elementów wewnętrznych?
- Test sprawdza tylko jeden sposób działania
- Wskazówka "dokładność"
- Testy jednostkowe przeznaczone do testowania zależności
- Co oznacza pokrycie kodu testami?
- Bycie dokładnym
- Wskazówka "wysoka wydajność"
- Integracja jako ukryte jednostki
- Testy jednostkowe w ogromnym stopniu wykorzystujące procesor i pamięć operacyjną
- Istnienie zbyt wielu testów
- Wskazówka "automatyzacja"
- Automatyzacja począwszy od dnia pierwszego
- Niezależność od platformy
- Wysoka wydajność w potoku ciągłej integracji
- Wskazówka "brak współzależności"
- Odpowiedzialność frameworka testów jednostkowych
- Odpowiedzialność programisty
- Wskazówka "deterministyczność"
- Przypadki niedeterministycznych testów jednostkowych
- Przykład zamrożenia czasu
- Podsumowanie
Część II. Stworzenie aplikacji z zastosowaniem podejścia w stylu TDD
Rozdział 7. Pragmatyczne omówienie architektury DDD
- Wymagania techniczne
- Praca z przykładową aplikacją
- Projekt aplikacji
- Projekt obiektów kontraktu
- Projekt warstwy dziedziny
- Poznawanie dziedzin
- Obiekty dziedziny
- Encje i obiekty wartości
- Agregacja
- Modele anemiczne
- Wszechobecny język
- Poznawanie usług
- Zarządzanie postem
- Usługi aplikacji
- Usługi infrastruktury
- Cechy charakterystyczne usługi
- Poznawanie repozytoriów
- Przykład repozytorium
- Entity Framework i repozytoria
- Połączenie wszystkiego w całość
- Okno Solution Explorer
- Widok architekturalny
- Podsumowanie
- Dalsza lektura
Rozdział 8. Opracowanie aplikacji pozwalającej na rezerwowanie wizyt
- Wymagania techniczne
- Zebranie wymagań biznesowych
- Cele biznesowe
- Historyjki użytkownika
- Projektowanie w duchu architektury DDD
- Obiekty dziedziny
- Usługi dziedziny
- Architektura systemu
- Implementowanie tras
- Frontend
- Backend w postaci relacyjnej bazy danych
- Backend w postaci bazy danych opartej na dokumentach
- Używanie wzorca mediatora
- Podsumowanie
- Dalsza lektura
Rozdział 9. Wykorzystanie Entity Framework i relacyjnej bazy danych do opracowania aplikacji pozwalającej na rezerwowanie wizyt
- Wymagania techniczne
- Planowanie kodu źródłowego i struktury projektu
- Analiza struktury projektu
- Utworzenie projektów i konfiguracja zależności
- Konfiguracja projektu dziedziny
- Przygotowanie Entity Framework
- Przygotowanie projektu witryny internetowej
- Implementacja Web API z użyciem programowania sterowanego testami
- Używanie działającego dostawcy EF dla magazynu danych w pamięci
- Implementacja pierwszej historyjki użytkownika
- Implementacja piątej historyjki użytkownika (zarządzanie czasem)
- Udzielenie odpowiedzi na najczęściej zadawane pytania
- Czy te testy jednostkowe są wystarczające?
- Dlaczego nie utworzyliśmy testów jednostkowych dla kontrolerów?
- Czy system został wystarczająco przetestowany?
- Pominęliśmy testowanie pewnych obszarów, więc jak osiągnąć wysoki poziom pokrycia testami?
- Podsumowanie
Rozdział 10. Wykorzystanie wzorca repozytorium i bazy danych opartej na dokumentach do opracowania aplikacji pozwalającej na rezerwowanie wizyt
- Wymagania techniczne
- Planowanie kodu źródłowego i struktury projektu
- Analiza struktury projektu
- Utworzenie projektów i konfiguracja zależności
- Konfiguracja projektu dziedziny
- Wzorzec repozytorium
- Przygotowanie projektu witryny internetowej
- Implementacja Web API z użyciem programowania sterowanego testami
- Implementacja pierwszej historyjki użytkownika
- Implementacja piątej historyjki użytkownika (zarządzanie czasem)
- Udzielenie odpowiedzi na najczęściej zadawane pytania
- Czy te testy jednostkowe są wystarczające?
- Dlaczego nie utworzyliśmy testów jednostkowych dla kontrolerów?
- Dlaczego nie utworzyliśmy testów jednostkowych dla implementacji repozytoriów?
- Czy system został wystarczająco przetestowany?
- Pominęliśmy testowanie pewnych obszarów, więc jak osiągnąć wysoki poziom pokrycia testami?
- Podsumowanie
Część III. Zastosowanie programowania sterowanego testami we własnych projektach
Rozdział 11. Wdrożenie potoku ciągłej integracji za pomocą usługi GitHub Actions
- Wymagania techniczne
- Wprowadzenie do systemu ciągłej integracji
- Sposób działania systemu ciągłej integracji
- Zalety systemu ciągłej integracji
- Implementacja procesu ciągłej integracji za pomocą usługi GitHub Actions
- Utworzenie przykładowego projektu w repozytorium GitHub
- Zdefiniowanie sposobu działania
- System ciągłej integracji i testowanie
- Symulowanie testów zakończonych niepowodzeniem
- Omówienie sposobu działania
- Podsumowanie
- Dalsza lektura
Rozdział 12. Praca z uaktualnianymi projektami
- Wymagania techniczne
- Analizowanie trudności
- Obsługa mechanizmu wstrzykiwania zależności
- Trudności związane z modyfikowaniem kodu źródłowego
- Trudności związane z czasem i wysiłkiem
- Strategia pozwalająca na zastosowanie programowania sterowanego testami
- Rozważ ponowne utworzenie projektu
- Zmiany kodu źródłowego
- Natywna obsługa dla mechanizmu wstrzykiwania zależności
- Poziom pokrycia testami przed dodaniem testów jednostkowych
- Refaktoryzacja na potrzeby testów jednostkowych
- Tworzenie egzemplarzy w kodzie
- Zastępowanie statycznych elementów składowych
- Zmiana struktury kodu źródłowego
- Podsumowanie
- Dalsza lektura
Rozdział 13. Zawiłości związane ze stosowaniem programowania sterowanego testami
- Trudności techniczne
- Projekt nowy czy uaktualniany?
- Narzędzia i infrastruktura
- Trudności w zespole
- Doświadczenie zespołu
- Ochota do działania
- Czas
- Trudności biznesowe
- Korzyści biznesowe wynikające z programowania sterowanego testami
- Wady testów jednostkowych z perspektywy biznesowej
- Argumenty za programowaniem sterowanym testami i związane z nim błędne koncepcje
- Testy jednostkowe, a nie programowanie sterowane testami
- Testy jednostkowe nie są implementowane przez testerów
- Sposób tworzenia i obsługi technicznej dokumentacji
- Mamy niekompetentnych programistów
- Podsumowanie
Dodatek A. Biblioteki, których najczęściej używa się podczas testów jednostkowych
- Wymagania techniczne
- Frameworki testów jednostkowych
- MSTest
- NUnit
- Biblioteki imitacji
- Moq
- Biblioteki pomocnicze dla testów jednostkowych
- Fluent Assertions
- AutoFixture
- Dalsza lektura
Dodatek B. Zaawansowane scenariusze związane z używaniem imitacji
- Wymagania techniczne
- Utworzenie biblioteki klienta OpenWeather
- API One Call
- Utworzenie szkieletu rozwiązania
- Rozpoczęcie pracy nad implementacją z użyciem programowania sterowanego testami
- Niezaliczenie i późniejsze zaliczenie testu
- Podsumowanie
- Analizowanie skomplikowanych scenariuszy imitacji
- Dalsza lektura
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-289-1694-4 |
Rozmiar pliku: | 15 MB |