Testy jednostkowe. Zasady, praktyki i wzorce - Helion

Tytuł oryginału: Unit Testing Principles, Practices, and Patterns
Tłumaczenie: Katarzyna Bogusławska
ISBN: 978-83-283-6872-9
stron: 296, Format: ebook
Data wydania: 2020-10-26
Księgarnia: Helion
Cena książki: 33,50 zł (poprzednio: 67,00 zł)
Oszczędzasz: 50% (-33,50 zł)
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!
Osoby które kupowały "Testy jednostkowe. Zasady, praktyki i wzorce", wybierały także:
- Gray Hat C#. Język C# w kontroli i łamaniu zabezpieczeń 57,74 zł, (17,90 zł -69%)
- Język C. Kurs video. Praktyczne wprowadzenie do programowania 79,00 zł, (35,55 zł -55%)
- Język C# w praktyce. Kurs video. Przetwarzanie danych zewnętrznych 99,00 zł, (44,55 zł -55%)
- Programowanie asynchroniczne i równoległe w C#. Kurs video. Poziom podstawowy 69,00 zł, (31,05 zł -55%)
- Platforma Xamarin. Kurs video. Poziom drugi. Zaawansowane techniki tworzenia aplikacji cross-platform 99,00 zł, (44,55 zł -55%)
Spis treści
Testy jednostkowe. Zasady, praktyki i wzorce eBook -- 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