- Wprowadzenie do testowania
- Rodzaje i strategie testowania
- Piramida testów
- Dobór strategii testowania
- Idea Test FIRST
- Test FIST vs Test AFTER
- Różnie i konswekwencje implementacji testów przed i po właściwej implementacji kodu
- Testy jednostkowe powinny być:
- Fast, szybkie
- Independent, niezależne
- Repeatable, powtarzalne
- Self-validating, samo-walidujące się
- Timely, pisane we właściwym momencie
- Test FIST vs Test AFTER
- Testy jednostkowe
- Czym jest jednostka i test jednostkowy?
- Struktura testu jednostkowego
- Arrange, wrowadzenie systemu w stan użliwiający przeprowadzenie testy
- Act, wywołanie testowanej operacji
- Assert, weryfikacja poprawności stanu
- Strategie nazewnictwa metod testowych
- Przygotowanie stanu
- Metoda
setUp()
- Metoda
- Weryfikacja rezultatu
- Asercje
- "Uprzątnięcie" po teście
- Metoda
tearDown()
- Metoda
- Organizacja kodu testowego
- Wzorce organizacji
- Testcase Class per Class
- Testcase Class per Feature
- Testcase Superclass
- Parametrized Test
- ...
- Wzorce organizacji
- Odcinanie zależności
- Test Doubles
- Dummies
- Mocki
- Stuby
- Spies
- Fakes
- Test Doubles
- Narzędzia
- PHPUnit
- Prophecy
- TestDox
- Testability kodu
- Antywzorce i czynniki wpływające na trudność testowania kodu
- Wysokie sprzężenie, coupling
- Źle wykorzystany wzorzec projektowy Singleton
- Wysoka złożoność cyklomatyczna kodu
- Wywołania statyczne
- Antywzorce i czynniki wpływające na trudność testowania kodu
- Test Driven Development
- 3 prawa TDD Roberta "Uncle Boba" Martina
- "You are not allowed to write any production code unless it is to make a failing unit test pass."
- "You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures."
- "You are not allowed to write any more production code than is sufficient to pass the one failing unit test."
- Test FIRST + Refactoring
- Cykl red-green-refactor
- 3 prawa TDD Roberta "Uncle Boba" Martina
- Sposoby zapewniania jakości testów
- Code Coverage vs. Branch Coverage
- W przypadku PHPUnit wymagana jest instalacja xDebuga
- Code Review
- Testowanie mutacyjne
- Weryfikacja polega na "wstrzykiwaniu" w kod programu kolejnych mutantów, a następnie uruchamianiu testów w celu sprawdzenia, czy mutant zostanie przez nie wykryty
- Narzędzia
- Humbug dla PHP 5.x
- Infection dla PHP 7.1+
- Code Coverage vs. Branch Coverage
Przykładowy kod znajduje się w katalogu code/06-testing.
$ composer install
$ ./vendor/bin/phpunit
PHPUnit 7.1.1 by Sebastian Bergmann and contributors.
Runtime: PHP 7.2.0 with Xdebug 2.6.0rc1
Configuration: designing-and-implementing-php-apps-course/notes/lectures/code/06-testing/phpunit.xml.dist
...... 6 / 6 (100%)
Time: 64 ms, Memory: 6.00MB
OK (6 tests, 6 assertions)