3. Každý testuje.
Kdo říká, že ne, ten testuje nejvíc.
Matěj Rokos | Driveto.cz
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
4. Soutěžní otázka 1: Co lze jednotkově
testovat?
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
5. Rozbor odpovědi 1-3
• Využívá zdroje (Databáze, filesystem, webové služby, aj.)
• Dále více věcí najednou (získá data, spočítá výsledek)
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
6. Rozbor odpovědi 1-1
+Oddělená business logika
- Stále není jednotkově testovatelné
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
7. Rozbor odpovědi 1-2
+Deterministicky testovatelné (na zadaný vstup -> očekávatelný výstup)
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
8. Jak můžeme testovat?
• Unit testy:
• Nejmenší součást kódu
• Bez externích závislostí
• Integrační testy:
• Funkcionalita více služeb „pohromadě“
• Akceptační testy:
• Testujeme „celek“
• Request->response
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
9. Př. 1: REST API – mobilní aplikace
App
Api
DatabázeAvg. calculator
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
10. Př. 2: Symfony PHP backend
Web Controller Avg. calculator
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
11. Soutěžní otázka 2: Co je „TDD“?
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
12. Jak na otestování špaget?
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
13. 1. Ručně otestovat web/aplikaci
• Funguje vůbec?
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
14. 2. Identifikovat business logiku
• Které části kódu jsou klíčové?
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
15. 3. Přesun logiky do služeb
• Business logika je klíčová -> nutno testovat
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
16. 4. Otestovat znovu
• Nerozbil jsem nic?
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
17. 5. Testování
1. Příprava prostředí
2. Napíšeme test
1. Přidáme různé vstupy, které nás napadnou,
bez ohledu na to, jestli mohou či nemohou nastat
2. Velmi pravděpodobně nalezneme spoustu chyb
3. Opravíme kód třídy tak, aby testy procházely
- tento postup již připomíná TDD
https://phpunit.de/getting-started/phpunit-7.html
<2, 3> 2,5
<10, 20> 15
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
19. Soutěžní otázka 4: Co nebyla business logika?
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
20. Shrnutí
1. Všichni již stejně testujeme (var_dump?)
2. Oddělená business logika – SRP
viz samostatná přednáška:
https://www.slideshare.net/PetrBechyn/phpkai-peme-iteln-kd-2-by-petr-bechyn-driveto)
3. Unit test
1. nevyužívá externí zdroje (databáze, webservices)
2. Je rychlejší než integrační testy (= rychlejší zpětná vazba)
3. Nevyžaduje komplexní sadu vstupů k otestování všech scénářů
4. Díky výše zmíněnému je snadno a rychle debugovatelný
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
21. Kam dál?
1. Automatické testy -> CI:
1. Školení
1. https://pehapkari.cz/kurz/ci-a-cd-s-gitlab-ci-z-0-na-100/)
2. Nástroje?
1. Github – lze zdarma využít Travis, nebo CircleCI
2. Gitlab – build-in nástroj pipelines
3. Bitbucket – build-in nástroj pipelines
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
22. Reference
• Další čtení:
• https://martinfowler.com/bliki/UnitTest.html
• https://phpunit.de/getting-started-with-phpunit.html
• Testovací repo:
• https://github.com/driveto/writing-readable-code-5
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
23. Dotazy
• Dotazy, náměty, připomínky…?
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně
24. Díky za pozornost!
• We are hiring
www.driveto.cz
Petr Bechyně petr.bechyne@driveto.cz
CTO Driveto 736 761 183
Michal Hojgr michal.hojgr@driveto.cz
Senior developer Driveto
github.com/driveto
Píšeme čitelný a testovatelný kód #5
11. 10. 2018 Petr Bechyně