Test-Driven Development w C# i .NET. Tworzenie wysokiej jako - Helion
Tytuł oryginału: Pragmatic Test-Driven Development in C# and .NET: Write loosely coupled, documented, and high-quality code with DDD using familiar tools and libraries
TÅ‚umaczenie: Robert G
ISBN: 978-83-289-1693-7
stron: 344, Format: 165x235, okładka: mi
Księgarnia: Helion
Książka będzie dostępna od października 2024
Spo
Zobacz także:
- ASP .NET Core. Kurs video. Rozwijanie dodatkowych funkcjonalności Web API 89,00 zł, (22,25 zł -75%)
- ASP.NET Core. Kurs video. Tworzenie REST Web API 49,00 zł, (12,25 zł -75%)
- PowerShell. Kurs video. Zarz 169,00 zł, (50,70 zł -70%)
- Gray Hat C#. Język C# w kontroli i łamaniu zabezpieczeń 57,74 zł, (17,90 zł -69%)
- ASP.NET Core 6. Kurs video. Rozwijaj aplikacje webowe z Entity Framework Core 178,97 zł, (62,64 zł -65%)
Spis treści
Test-Driven Development w C# i .NET. Tworzenie wysokiej jakości kodu w architekturze DDD za pomocą znanych narzędzi i bibliotek -- 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