reklama - zainteresowany?

Testy jednostkowe. Zasady, praktyki i wzorce - Helion

Testy jednostkowe. Zasady, praktyki i wzorce
Autor: Vladimir Khorikov
Tytuł oryginału: Unit Testing Principles, Practices, and Patterns
Tłumaczenie: Katarzyna Bogusławska
ISBN: 978-83-283-6871-2
stron: 296, Format: 168x237, okładka: miękka
Data wydania: 2020-10-26
Księgarnia: Helion

Cena książki: 69,00 zł

Dodaj do koszyka Testy jednostkowe. Zasady, praktyki i wzorce

Tagi: C# - Programowanie | Inne - Programowanie | Testowanie oprogramowania

Każdy inżynier oprogramowania zna teoretyczne podstawy testowania. O tym, że sumienne przeprowadzenie testów ma podstawowe znaczenie dla jakoÅ›ci gotowego produktu, nie trzeba nikogo przekonywać. A jednak wciąż zbyt czÄ™sto okazuje siÄ™, że zaplanowanie, napisanie i przeprowadzenie testów jednostkowych w praktyce nie jest Å‚atwym zadaniem. Co gorsza, niewÅ‚aÅ›ciwe testy psujÄ… kod, mnożą bÅ‚Ä™dy i zabierajÄ… mnóstwo cennego czasu i pieniÄ™dzy. Okazuje siÄ™, że dla uzyskania maksymalnej jakoÅ›ci projektu, który trzeba dostarczyć w krótkim czasie, konieczne jest nauczenie siÄ™ praktycznego stosowania zasad i wzorców testowania jednostkowego.

JeÅ›li znasz już podstawy testowania jednostkowego, dziÄ™ki tej książce nauczysz siÄ™ projektowania i pisania testów, które obierajÄ… za cel model domeny i pozostaÅ‚e kluczowe obszary kodu. Ten przejrzyÅ›cie napisany przewodnik poprowadzi CiÄ™ przez proces tworzenia zestawów testowych o optymalnej wartoÅ›ci, bezpiecznej automatyzacji testowania i umiejÄ™tnego wÅ‚Ä…czania go w cykl życia oprogramowania. W książce znalazÅ‚y siÄ™ uniwersalne wskazówki dotyczÄ…ce analizy dowolnych testów jednostkowych oraz porady odnoszÄ…ce siÄ™ do zmian testów nastÄ™pujÄ…cych wraz ze zmianami kodu produkcyjnego. Nie zabrakÅ‚o również informacji, dziÄ™ki którym sprawnie zidentyfikujesz i wykluczysz ewentualne antywzorce testowania. MateriaÅ‚ zostaÅ‚ bogato zilustrowany przejrzystymi przykÅ‚adami kodu napisanego w C#. Naturalnie, majÄ… one zastosowanie także dla innych jÄ™zyków programowania.

W książce między innymi:

  • cel testowania jednostkowego i cechy dobrych testów
  • fundamenty porzÄ…dnego testowania jednostkowego
  • wpÅ‚yw zaÅ›lepek i sterowników na stabilność testów
  • style testowania jednostkowego
  • zalety i ograniczenia testowania integracyjnego

Przed wdrożeniem dobrze przetestuj swój kod!

Dodaj do koszyka Testy jednostkowe. Zasady, praktyki i wzorce

 

Osoby które kupowały "Testy jednostkowe. Zasady, praktyki i wzorce", wybierały także:

  • Domain-Driven Design dla .NET Core. Jak rozwiÄ…zywać zÅ‚ożone problemy podczas projektowania architektury aplikacji
  • Gray Hat C#. JÄ™zyk C# w kontroli i Å‚amaniu zabezpieczeÅ„
  • Platforma Xamarin. Kurs video. Poziom drugi. Zaawansowane techniki tworzenia aplikacji cross-platform
  • Wzorce projektowe dla programistów C#. Kurs video
  • WPF. Kurs video. Om

Dodaj do koszyka Testy jednostkowe. Zasady, praktyki i wzorce

Spis treści

Testy jednostkowe. Zasady, praktyki i wzorce -- spis treści

 

Przedmowa 11

 

Podziękowania 12

O książce 13

O autorze 15

CZĘŚĆ I. SZEROKI HORYZONT 17

Rozdział 1. Cel testowania jednostkowego 19

  • 1.1. Obecna kondycja testowania jednostkowego 20
  • 1.2. Cel testowania jednostkowego 21
    • 1.2.1. Co czyni test dobrym? 23
  • 1.3. Stosowanie wskaźników pokrycia do mierzenia jakoÅ›ci zestawu testowego 24
    • 1.3.1. Interpretacja wskaźnika pokrycia kodu 25
    • 1.3.2. Interpretacja wskaźnika pokrycia gaÅ‚Ä™zi 26
    • 1.3.3. Problemy z pokryciem gaÅ‚Ä™zi 27
    • 1.3.4. Wymaganie procentowej wartoÅ›ci pokrycia 30
  • 1.4. WÅ‚aÅ›ciwoÅ›ci dobrego zestawu testowego 31
    • 1.4.1. Integracja z cyklem wytwarzania oprogramowania 31
    • 1.4.2. Koncentracja na najważniejszych częściach kodu 31
    • 1.4.3. Maksymalna wartość przy minimalnych kosztach 32
  • 1.5. Czego nauczysz siÄ™ z tej książki 33
  • Podsumowanie 34

Rozdział 2. Co to jest test jednostkowy? 37

  • 2.1. Definicja testu jednostkowego 38
    • 2.1.1. Izolacja - podejÅ›cie londyÅ„skie 38
    • 2.1.2. Izolacja - podejÅ›cie klasyczne 44
  • 2.2. Klasyczna i londyÅ„ska szkoÅ‚a testów jednostkowych 47
    • 2.2.1. ObsÅ‚uga zależnoÅ›ci wedÅ‚ug szkoÅ‚y londyÅ„skiej i klasycznej 47
  • 2.3. Zestawienie podejść - klasycznej i londyÅ„skiej szkoÅ‚y testowania jednostkowego 51
    • 2.3.1. Testowanie jednostkowe jednej klasy na raz 51
    • 2.3.2. Testowanie jednostkowe dużej mapy wzajemnie Å‚Ä…czÄ…cych siÄ™ klas 52
    • 2.3.3. DokÅ‚adne wskazywanie źródÅ‚a bÅ‚Ä™dów 52
    • 2.3.4. Inne różnice miÄ™dzy podejÅ›ciem klasycznym a londyÅ„skim 53
  • 2.4. Testy integracyjne wedÅ‚ug dwóch szkóÅ‚ 54
    • 2.4.1. Testy systemowe to podzbiór testów integracyjnych 55
  • Podsumowanie 57

Rozdział 3. Anatomia testu jednostkowego 59

  • 3.1. Struktura testu jednostkowego 60
    • 3.1.1. Zastosowanie wzorca AAA 60
    • 3.1.2. Unikanie wielokrotnych sekcji przygotuj, zrób, sprawdź 61
    • 3.1.3. Unikanie warunków w testach 62
    • 3.1.4. Optymalna wielkość sekcji 63
    • 3.1.5. Liczba weryfikacji w sekcji asercji 65
    • 3.1.6. Sekwencja koÅ„cowa 65
    • 3.1.7. Zróżnicowanie systemu poddawanego testom 65
    • 3.1.8. UsuniÄ™cie komentarzy na temat sekcji z testów 66
  • 3.2. Omówienie biblioteki testowej xUnit 67
  • 3.3. Wielokrotne wykorzystanie jarzma testowego 68
    • 3.3.1. Silne wiÄ…zania miÄ™dzy testami - antywzorzec 69
    • 3.3.2. Użycie konstruktora zmniejsza czytelność 70
    • 3.3.3. Lepszy sposób wielokrotnego wykorzystania jarzma testowego 70
  • 3.4. Nazewnictwo testów jednostkowych 72
    • 3.4.1. Nazewnictwo testów jednostkowych - wytyczne 74
    • 3.4.2. PrzykÅ‚ad: zmiana nazwy testu zgodnie z wytycznymi 74
  • 3.5. Zamiana na testy parametryzowane 76
    • 3.5.1. Generowanie danych dla testów parametryzowanych 78
  • 3.6. Biblioteka asercji i dalsze poprawianie czytelnoÅ›ci testów 80
  • Podsumowanie 81

CZĘŚĆ II. TESTY, KTÓRE PRACUJÄ„ DLA CIEBIE 83

Rozdział 4. Cztery filary dobrego testu jednostkowego 85

  • 4.1. Cztery filary dobrego testu jednostkowego 86
    • 4.1.1. Filar pierwszy: ochrona przed regresjÄ… 86
    • 4.1.2. Filar drugi: odporność na zmiany 87
    • 4.1.3. Co powoduje wyniki obarczone bÅ‚Ä™dem pierwszego rodzaju 89
    • 4.1.4. Skup siÄ™ na koÅ„cowym wyniku, a nie szczegóÅ‚ach implementacyjnych 92
  • 4.2. Nierozerwalny zwiÄ…zek miÄ™dzy pierwszÄ… a drugÄ… cechÄ… 94
    • 4.2.1. ZwiÄ™kszanie dokÅ‚adnoÅ›ci testów 94
    • 4.2.2. Waga wyników faÅ‚szywie dodatnich i faÅ‚szywie ujemnych - dynamika 96
  • 4.3. Filary trzeci i czwarty: szybka informacja zwrotna i utrzymywalność 97
  • 4.4. W poszukiwaniu idealnego testu 98
    • 4.4.1. Czy możliwe jest stworzenie idealnego testu 99
    • 4.4.2. Przypadek skrajny nr 1: test systemowy 99
    • 4.4.3. Przypadek skrajny nr 2: testy trywialne 100
    • 4.4.4. Przypadek skrajny nr 3: niestabilne testy 101
    • 4.4.5. W poszukiwaniu idealnego testu - wyniki 102
  • 4.5. Omówienie dobrze znanych pojęć z zakresu testów automatycznych 105
    • 4.5.1. Poziomy piramidy testów 105
    • 4.5.2. Wybór miÄ™dzy testowaniem czarno- i biaÅ‚oskrzynkowym 107
  • Podsumowanie 108

RozdziaÅ‚ 5. Atrapy i stabilność testów 111

  • 5.1. Rozróżnienie miÄ™dzy atrapami a zaÅ›lepkami 112
    • 5.1.1. Rodzaje dublerów testowych 112
    • 5.1.2. Atrapa (narzÄ™dzie) kontra atrapa (dubler testowy) 113
    • 5.1.3. Nie poddawaj asercjom interakcji z zaÅ›lepkami 114
    • 5.1.4. Używanie atrap i zaÅ›lepek razem 116
    • 5.1.5. ZwiÄ…zek atrap i zaÅ›lepek z poleceniami i zapytaniami 116
  • 5.2. Zachowanie dajÄ…ce siÄ™ zaobserwować a szczegóÅ‚y implementacyjne 117
    • 5.2.1. DajÄ…ce siÄ™ zaobserwować zachowanie to nie publiczny interfejs API 118
    • 5.2.2. WyciekajÄ…ce szczegóÅ‚y implementacyjne - przykÅ‚ad z operacjÄ… 119
    • 5.2.3. Dobrze zaprojektowany interfejs API i enkapsulacja 122
    • 5.2.4. WyciekajÄ…ce szczegóÅ‚y implementacyjne - przykÅ‚ad ze stanem 123
  • 5.3. ZwiÄ…zek miÄ™dzy atrapami a niestabilnoÅ›ciÄ… testów 125
    • 5.3.1. Architektura heksagonalna 125
    • 5.3.2. Komunikacja wewnÄ…trzsystemowa i miÄ™dzysystemowa 129
    • 5.3.3. Komunikacja wewnÄ…trzsystemowa i miÄ™dzysystemowa - przykÅ‚ad 130
  • 5.4. Klasyczna i londyÅ„ska szkoÅ‚a testowania jednostkowego - raz jeszcze 133
    • 5.4.1. Nie wszystkie zewnÄ™trzne zależnoÅ›ci należy zastÄ™pować atrapami 133
    • 5.4.2. Wykorzystanie atrap do weryfikowania zachowania 135
  • Podsumowanie 135

Rozdział 6. Style testowania jednostkowego 139

  • 6.1. Trzy style testowania jednostkowego 140
    • 6.1.1. Styl oparty na rezultatach - definicja 140
    • 6.1.2. Styl oparty na stanach - definicja 141
    • 6.1.3. Styl oparty na komunikacji - definicja 142
  • 6.2. Trzy style testowania jednostkowego - porównanie 143
    • 6.2.1. Porównanie stylów pod wzglÄ™dem ochrony przed regresjÄ… i szybkoÅ›ci informacji zwrotnej 144
    • 6.2.2. Porównanie stylów pod wzglÄ™dem odpornoÅ›ci na zmiany 144
    • 6.2.3. Porównanie stylów pod wzglÄ™dem utrzymywalnoÅ›ci 145
    • 6.2.4. Porównanie stylów - wyniki 147
  • 6.3. Architektura funkcyjna 148
    • 6.3.1. Czym jest programowanie funkcyjne? 148
    • 6.3.2. Czym jest architektura funkcyjna? 151
    • 6.3.3. Porównanie architektury funkcyjnej i heksagonalnej 153
  • 6.4. PrzejÅ›cie do architektury funkcyjnej i testowania opartego na rezultatach 154
    • 6.4.1. System audytowania - wprowadzenie 154
    • 6.4.2. Wykorzystanie atrap w celu oddzielenia testu od systemu plików 157
    • 6.4.3. PrzejÅ›cie do architektury funkcyjnej 160
    • 6.4.4. Potencjalne dalsze kroki 164
  • 6.5. Wady architektury funkcyjnej 165
    • 6.5.1. Zasadność stosowania architektury funkcyjnej 165
    • 6.5.2. Wady pod wzglÄ™dem wydajnoÅ›ci 167
    • 6.5.3. Wady pod wzglÄ™dem rozmiaru bazy kodu 167
  • Podsumowanie 168

Rozdział 7. Zmiany ku bardziej wartościowym testom jednostkowym 171

  • 7.1. OkreÅ›lenie kodu podlegajÄ…cego refaktoryzacji 172
    • 7.1.1. Cztery typy kodu 172
    • 7.1.2. Wykorzystanie wzorca Skromny Obiekt do podziaÅ‚u przeszacowanego kodu 175
  • 7.2. Zmiany ku bardziej wartoÅ›ciowym testom 178
    • 7.2.1. System zarzÄ…dzania kontaktami z klientami - wprowadzenie 178
    • 7.2.2. Próba nr 1: ujawnienie zależnoÅ›ci 180
    • 7.2.3. Próba nr 2: wprowadzenie warstwy usÅ‚ug aplikacji 180
    • 7.2.4. Próba nr 3: usuniÄ™cie zÅ‚ożonoÅ›ci z usÅ‚ugi aplikacji 182
    • 7.2.5. Próba nr 4: wprowadzenie nowej klasy Company 184
  • 7.3. Analiza optymalnego pokrycia testami jednostkowymi 186
    • 7.3.1. Testowanie warstwy domeny i kodu pomocniczego 187
    • 7.3.2. Testowanie kodu z pozostaÅ‚ych części diagramu 188
    • 7.3.3. Czy powinno siÄ™ testować warunki wstÄ™pne? 188
  • 7.4. ObsÅ‚uga logiki warunkowej w kontrolerach 189
    • 7.4.1. Wykorzystanie wzorca Polecenie 191
    • 7.4.2. Wykorzystanie zdarzeÅ„ domeny do Å›ledzenia zmian w modelu domeny 194
  • 7.5. Wnioski 197
  • Podsumowanie 199

CZĘŚĆ III. TESTY INTEGRACYJNE 203

Rozdział 8. Po co testy integracyjne? 205

  • 8.1. Test integracyjny - definicja 206
    • 8.1.1. Rola testów integracyjnych 206
    • 8.1.2. Piramida testów - jeszcze raz 207
    • 8.1.3. Testy integracyjne kontra szybka reakcja 208
  • 8.2. Które zewnÄ™trzne zależnoÅ›ci testować bezpoÅ›rednio 209
    • 8.2.1. Dwa typy zależnoÅ›ci poza kontrolÄ… procesu 210
    • 8.2.2. ObsÅ‚uga zarzÄ…dzanych i niezarzÄ…dzanych zależnoÅ›ci 211
    • 8.2.3. Co, jeÅ›li nie możesz wykorzystać prawdziwej bazy danych w testach integracyjnych? 212
  • 8.3. Testy integracyjne - przykÅ‚ad 213
    • 8.3.1. Jakie scenariusze przetestować? 214
    • 8.3.2. Klasyfikacja bazy danych i szyny danych 214
    • 8.3.3. Co z testami systemowymi? 215
    • 8.3.4. Test integracyjny - próba pierwsza 216
  • 8.4. Stosowanie interfejsów do abstrakcji zależnoÅ›ci 217
    • 8.4.1. Interfejsy i luźne wiÄ…zania 217
    • 8.4.2. Po co używać interfejsów dla zewnÄ™trznych zależnoÅ›ci? 218
    • 8.4.3. Stosowanie interfejsów dla wewnÄ™trznych zależnoÅ›ci 219
  • 8.5. Najlepsze praktyki testów integracyjnych 220
    • 8.5.1. Jasno oznacz granice modelu domeny 220
    • 8.5.2. Zmniejszaj liczbÄ™ warstw 220
    • 8.5.3. Usuwaj zapÄ™tlone zależnoÅ›ci 222
    • 8.5.4. Użycie wielu sekcji dziaÅ‚ania w teÅ›cie 224
  • 8.6. Jak testować zapisywanie logów 225
    • 8.6.1. Czy w ogóle powinno siÄ™ testować pisanie logów 225
    • 8.6.2. Jak testować pisanie logów 226
    • 8.6.3. Ile logowania wystarczy 231
    • 8.6.4. Jak przekazywać instancje mechanizmu logowania 232
  • 8.7. Wnioski 233
  • Podsumowanie 233

Rozdział 9. Najlepsze praktyki modelowania za pomocą atrap 237

  • 9.1. Maksymalizowanie wartoÅ›ci atrap 237
    • 9.1.1. Weryfikacja interakcji na obrzeżach systemu 240
    • 9.1.2. ZastÄ™powanie atrap agentami 243
    • 9.1.3. Co z interfejsem IDomainLogger 245
  • 9.2. Najlepsze praktyki modelowania za pomocÄ… atrap 246
    • 9.2.1. Atrapy sÅ‚użą tylko do testów integracyjnych 246
    • 9.2.2. Wiele atrap w jednym teÅ›cie 246
    • 9.2.3. Weryfikacja liczby żądaÅ„ 247
    • 9.2.4. Modeluj tylko typy, które sam utworzyÅ‚eÅ› 247
  • Podsumowanie 248

Rozdział 10. Testowanie bazy danych 251

  • 10.1. Warunki umożliwiajÄ…ce testowanie bazy danych 252
    • 10.1.1. Przechowywanie bazy danych w systemie kontroli wersji 252
    • 10.1.2. Dane referencyjne to część schematu bazy danych 253
    • 10.1.3. Oddzielne instancje dla każdego programisty 254
    • 10.1.4. Stanowe i migracyjne podejÅ›cie do dostarczania bazy danych 254
  • 10.2. ZarzÄ…dzanie transakcjami w bazie danych 256
    • 10.2.1. ZarzÄ…dzanie transakcjami w kodzie produkcyjnym 256
    • 10.2.2. ZarzÄ…dzanie transakcjami w testach integracyjnych 263
  • 10.3. Cykl życia danych testowych 265
    • 10.3.1. RównolegÅ‚e i sekwencyjne wykonanie testów 265
    • 10.3.2. SprzÄ…tanie danych pomiÄ™dzy wykonaniami testów 266
    • 10.3.3. Unikanie baz danych operujÄ…cych w pamiÄ™ci 267
  • 10.4. Wielokrotne wykorzystanie kodu w sekcjach 268
    • 10.4.1. Wielokrotne użycie kodu w sekcji przygotowaÅ„ 268
    • 10.4.2. Wielokrotne użycie kodu w sekcji dziaÅ‚ania 271
    • 10.4.3. Wielokrotne użycie kodu w sekcji asercji 271
    • 10.4.4. Czy test tworzy zbyt wiele transakcji do bazy danych 272
  • 10.5. CzÄ™sto zadawane pytania na temat testowania baz danych 273
    • 10.5.1. Czy testować operacje odczytu? 273
    • 10.5.2. Czy testować repozytoria? 275
  • 10.6. Wnioski 276
  • Podsumowanie 276

CZĘŚĆ IV. ANTYWZORCE TESTOWANIA JEDNOSTKOWEGO 279

Rozdział 11. Antywzorce testowania jednostkowego 281

  • 11.1. Testowanie jednostkowe prywatnych metod 282
    • 11.1.1. Metody prywatne i niestabilność testów 282
    • 11.1.2. Metody prywatne i niedostateczne pokrycie 282
    • 11.1.3. Kiedy testowanie metod prywatnych jest akceptowalne 283
  • 11.2. UdostÄ™pnianie stanu prywatnego 285
  • 11.3. Przenikanie wiedzy domenowej do testów 286
  • 11.4. Zanieczyszczanie kodu 288
  • 11.5. Modelowanie za pomocÄ… atrap konkretnych klas 290
  • 11.6. Praca z czasem 293
    • 11.6.1. Czas jako kontekst Å›rodowiskowy 293
    • 11.6.2. Czas jako jawna zależność 294
  • 11.7. Wnioski 295
  • Podsumowanie 295

Dodaj do koszyka Testy jednostkowe. Zasady, praktyki i wzorce

Code, Publish & WebDesing by CATALIST.com.pl



(c) 2005-2024 CATALIST agencja interaktywna, znaki firmowe należą do wydawnictwa Helion S.A.