SlideShare a Scribd company logo
1 of 25
Testy jednostkowe - PHPUnit
Czym są testy, dlaczego warto je pisać, podstawy frameworka PHPUnit.
Przygotował
Adam Dudel
Aurora Creation / PHP Developer
a.dudel@auroracreation.com
Testy jednostkowe - PHPUnit
Plan prezentacji
━━ Czym są testy jednostkowe?
━━ Po co piszemy testy?
━━ Wady i zalety
━━ PHPUnit
━━ Jak zacząć pracę z PHPUnit
━━ Trochę praktyki
Czym są testy jednostkowe?
Zadaniem testów jednostkowych jest testowanie logiki aplikacji. Aby
to było możliwe i jednocześnie testy były zrozumiałe dla programisty,
testowanie logiki odbywa się w małych częściach.
Po co piszemy testy?
Celem testów jednostkowych jest walidacja poprawnego działania małego fragmentu aplikacji. Pod
pojęciem małego fragmentu aplikacji rozumiemy najmniejszą możliwą jednostkę aplikacji.
W przypadku testów jednostkowych należy wspomnieć o izolacji testowanej jednostki od wpływu
czynników zewnętrznych. Ma to na celu skupić się w teście tylko i wyłącznie na konkretnej testowanej
funkcjonalności.
Tu z pomocą przychodzą Mocki, czyli “atrapy obiektów”. Mock jest imitacją obiektu podstawioną w miejsce
obiektu rzeczywistego.
Test Driven Development - technika
pisania testów składająca się z 3 etapów:
● RED
● GREEN
● REFACTOR
TDD
Zalety pisania testów jednostkowych
━━ sprawdzenie poprawności poszczególnych części kodu, poznawanie funkcjonalności
━━ uniknięcie komplikacji po merge’ach
━━ wymuszenie pisania kodu “testowalnego”
━━ większa kontrola nad własnym kodem
━━ szybsza refaktoryzacja
Wady pisania testów jednostkowych
━━ czas na naukę i pisanie testów
━━ wymagają pisania przemyślanego kodu
━━ nie każdy kod da się przetestować
Kiedy nie warto testować?
━━ w przypadku bardzo prostych aplikacji
━━ gdy aplikacja nie będzie dalej rozwijana
━━ prototypy
Framework PHPUnit
PHPUnit to framework testów jednostkowych, napisany przez Sebastiana Bergmanna. Tak jak w
przypadku podobnych bibliotek do testów używa on tzw. asercji, które sprawdzają jak zachowuje się kod
poddany testom.
Czym jest asercja?
W programowaniu asercja (ang.assertion) to predykat
(forma zdaniowa w danym języku, która zwraca prawdę lub
fałsz), umieszczony w pewnym miejscu w kodzie. Asercja
wskazuje, że programista zakłada, że predykat ów jest w
danym miejscu prawdziwy.
Źródło: Wikipedia
Najczęściej używane asercje
━━ assertTrue, assertFalse, assertSame
━━ assertIsArray,assertContains, assertCount, assertEmpty
━━ assertIsInt, assertIsNumber, assertIsFloat, assertIsObject, assertIsString
━━ expectException
Pokrycie kodu
PHPUnit oferuje nam narzędzie do generowania raportu z pokrycia kodu naszymi testami. Używa w tym
celu Xdebug. Jest to bardzo pomocne narzędzie, także w samym procesie pisania testów, dzięki któremu
możemy na bieżąco obserwować co jest faktycznie testowane.
Nie należy mocno sugerować się wskaźnikiem procentowego pokrycia kodu, jeśli testujemy przemyślany
kod to większe znaczenie ma pokrycie testami newralgicznych części systemu.
Jak zacząć pracę z PHPUnit?
━━ instalacja biblioteki za pomocą Composera
━━ przygotowanie pliku phpunit.xml
━━ testy prostej klasy do wysyłania wiadomości
Plik composer.json
Plik phpunit.xml i struktura katalogów
Klasa Mailer
Na potrzeby prezentacji mamy
prostą klasę służącą do wysyłania
maili.
Klasa Message
Klasa Message w konstruktorze oczekuje implementacji Mailera
oraz pozwala na ustalenie adresu e-mail.
Test metody sendMessage
Wynik wykonania testów:
Test wykonał się poprawnie mimo że
nie użyliśmy mocka dla klasy Mailer.
Metody z klasy Mailer nie powinny się
wykonywać - testujemy tylko klasę
Message.
Test metody sendMessage
Wynik wykonania testów:
Stworzyliśmy mocka, jednak testy
przestały działać. Mock nie jest
skonfigurowany.
Test metody sendMessage
Wynik wykonania testów:
Skonfigurowany mock na wartości
po których metoda send() powinna
zwrócić true.
Testy metody setEmail
Wynik wykonania testów:
Wynik wykonania testów:Test dla pustej wartości jest ok, jednak dla spacji jest błędny.
Poprawienie metody setEmail
Poprawiamy metodę setEmail(),
usuwając zbędne spacje ze
zmiennej za pomocą trim().
Testy metody setEmail z użyciem Data Provider
Wynik wykonania testów:
Aby nie pisać oddzielnego sprawdzania
dla każdego przypadku skorzystamy z
Data Providera.
Testy Klasy Message
Wynik wykonania testów:
Dziękuję za uwagę :)
Pytania?
a.dudel@auroracreation.com

More Related Content

Similar to Testy jednostkowe - PHPUnit

PHPUnit - jak zacząć pisać testy automatyczne [PL]
PHPUnit - jak zacząć pisać testy automatyczne [PL]PHPUnit - jak zacząć pisać testy automatyczne [PL]
PHPUnit - jak zacząć pisać testy automatyczne [PL]Droptica
 
Techniczna organizacja zespołu
Techniczna organizacja zespołuTechniczna organizacja zespołu
Techniczna organizacja zespołuintive
 
Testy Jednostokowe
Testy  JednostokoweTesty  Jednostokowe
Testy Jednostokowehugoamv
 
Strategie automatyzacji testow
Strategie automatyzacji testowStrategie automatyzacji testow
Strategie automatyzacji testowWiktor Żołnowski
 
Podstawy testowania oprogramowania INCO 2023.pptx
Podstawy testowania oprogramowania INCO 2023.pptxPodstawy testowania oprogramowania INCO 2023.pptx
Podstawy testowania oprogramowania INCO 2023.pptxKatarzyna Javaheri-Szpak
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieGrzegorz Godlewski
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPPiotr Horzycki
 
Ciągła Integracja W Projekcie - Metodyka I Narzędzia
Ciągła Integracja W Projekcie - Metodyka I NarzędziaCiągła Integracja W Projekcie - Metodyka I Narzędzia
Ciągła Integracja W Projekcie - Metodyka I NarzędziaPaweł Harajda
 
Wprowadzenie do implementacji architektur plug-in w PHP
Wprowadzenie do implementacji architektur plug-in w PHPWprowadzenie do implementacji architektur plug-in w PHP
Wprowadzenie do implementacji architektur plug-in w PHPPHPCon Poland
 
4Developers 2018: Unit testing - introduction (Marek Kawczyński)
4Developers 2018: Unit testing - introduction (Marek Kawczyński)4Developers 2018: Unit testing - introduction (Marek Kawczyński)
4Developers 2018: Unit testing - introduction (Marek Kawczyński)PROIDEA
 
Sporządzanie oraz umiejętne wykorzystanie przepisów i schematów. Ansible w pr...
Sporządzanie oraz umiejętne wykorzystanie przepisów i schematów. Ansible w pr...Sporządzanie oraz umiejętne wykorzystanie przepisów i schematów. Ansible w pr...
Sporządzanie oraz umiejętne wykorzystanie przepisów i schematów. Ansible w pr...The Software House
 
PLNOG19 - Andrzej Prałat & Wojciech Rybicki - Jak usprawnić działanie WAF wyk...
PLNOG19 - Andrzej Prałat & Wojciech Rybicki - Jak usprawnić działanie WAF wyk...PLNOG19 - Andrzej Prałat & Wojciech Rybicki - Jak usprawnić działanie WAF wyk...
PLNOG19 - Andrzej Prałat & Wojciech Rybicki - Jak usprawnić działanie WAF wyk...PROIDEA
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowychTomasz Borowski
 

Similar to Testy jednostkowe - PHPUnit (20)

PHPUnit - jak zacząć pisać testy automatyczne [PL]
PHPUnit - jak zacząć pisać testy automatyczne [PL]PHPUnit - jak zacząć pisać testy automatyczne [PL]
PHPUnit - jak zacząć pisać testy automatyczne [PL]
 
Techniczna organizacja zespołu
Techniczna organizacja zespołuTechniczna organizacja zespołu
Techniczna organizacja zespołu
 
Testy Jednostokowe
Testy  JednostokoweTesty  Jednostokowe
Testy Jednostokowe
 
Strategie automatyzacji testow
Strategie automatyzacji testowStrategie automatyzacji testow
Strategie automatyzacji testow
 
Podstawy testowania oprogramowania INCO 2023.pptx
Podstawy testowania oprogramowania INCO 2023.pptxPodstawy testowania oprogramowania INCO 2023.pptx
Podstawy testowania oprogramowania INCO 2023.pptx
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecie
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
Testowanie automatyczne 2024 INCO Academy
Testowanie automatyczne 2024 INCO AcademyTestowanie automatyczne 2024 INCO Academy
Testowanie automatyczne 2024 INCO Academy
 
Praktyki techniczne
Praktyki technicznePraktyki techniczne
Praktyki techniczne
 
Automatyzacja testów oprogramowania dla urządzeń mobilnych
Automatyzacja testów oprogramowania dla urządzeń mobilnychAutomatyzacja testów oprogramowania dla urządzeń mobilnych
Automatyzacja testów oprogramowania dla urządzeń mobilnych
 
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
 
[TestWarez 2017] Framework testowy aplikacji mobilnej dla systemu iOS - czy ...
[TestWarez 2017]  Framework testowy aplikacji mobilnej dla systemu iOS - czy ...[TestWarez 2017]  Framework testowy aplikacji mobilnej dla systemu iOS - czy ...
[TestWarez 2017] Framework testowy aplikacji mobilnej dla systemu iOS - czy ...
 
Ciągła Integracja W Projekcie - Metodyka I Narzędzia
Ciągła Integracja W Projekcie - Metodyka I NarzędziaCiągła Integracja W Projekcie - Metodyka I Narzędzia
Ciągła Integracja W Projekcie - Metodyka I Narzędzia
 
Wprowadzenie do implementacji architektur plug-in w PHP
Wprowadzenie do implementacji architektur plug-in w PHPWprowadzenie do implementacji architektur plug-in w PHP
Wprowadzenie do implementacji architektur plug-in w PHP
 
4Developers 2018: Unit testing - introduction (Marek Kawczyński)
4Developers 2018: Unit testing - introduction (Marek Kawczyński)4Developers 2018: Unit testing - introduction (Marek Kawczyński)
4Developers 2018: Unit testing - introduction (Marek Kawczyński)
 
ANSIBLE W PRAKTYCE
ANSIBLE W PRAKTYCEANSIBLE W PRAKTYCE
ANSIBLE W PRAKTYCE
 
Sporządzanie oraz umiejętne wykorzystanie przepisów i schematów. Ansible w pr...
Sporządzanie oraz umiejętne wykorzystanie przepisów i schematów. Ansible w pr...Sporządzanie oraz umiejętne wykorzystanie przepisów i schematów. Ansible w pr...
Sporządzanie oraz umiejętne wykorzystanie przepisów i schematów. Ansible w pr...
 
PLNOG19 - Andrzej Prałat & Wojciech Rybicki - Jak usprawnić działanie WAF wyk...
PLNOG19 - Andrzej Prałat & Wojciech Rybicki - Jak usprawnić działanie WAF wyk...PLNOG19 - Andrzej Prałat & Wojciech Rybicki - Jak usprawnić działanie WAF wyk...
PLNOG19 - Andrzej Prałat & Wojciech Rybicki - Jak usprawnić działanie WAF wyk...
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
university day 1
university day 1university day 1
university day 1
 

More from PHPstokPHPstok

Jak ograniczyć używanie tablic w PHP.pptx
Jak ograniczyć używanie tablic w PHP.pptxJak ograniczyć używanie tablic w PHP.pptx
Jak ograniczyć używanie tablic w PHP.pptxPHPstokPHPstok
 
Blaski i cienie pracy Project Managera.pptx
Blaski i cienie pracy Project Managera.pptxBlaski i cienie pracy Project Managera.pptx
Blaski i cienie pracy Project Managera.pptxPHPstokPHPstok
 
Zarządzanie złożonością
Zarządzanie złożonościąZarządzanie złożonością
Zarządzanie złożonościąPHPstokPHPstok
 
Bezpieczeństwo aplikacji webowych
Bezpieczeństwo aplikacji webowychBezpieczeństwo aplikacji webowych
Bezpieczeństwo aplikacji webowychPHPstokPHPstok
 
Wzorce projektowe w praktyce
Wzorce projektowe w praktyceWzorce projektowe w praktyce
Wzorce projektowe w praktycePHPstokPHPstok
 
Sztuka samodoskonalenia programisty
Sztuka samodoskonalenia programistySztuka samodoskonalenia programisty
Sztuka samodoskonalenia programistyPHPstokPHPstok
 
PSR czyli dobre praktyki programistyczne
PSR czyli dobre praktyki programistycznePSR czyli dobre praktyki programistyczne
PSR czyli dobre praktyki programistycznePHPstokPHPstok
 

More from PHPstokPHPstok (13)

Jak ograniczyć używanie tablic w PHP.pptx
Jak ograniczyć używanie tablic w PHP.pptxJak ograniczyć używanie tablic w PHP.pptx
Jak ograniczyć używanie tablic w PHP.pptx
 
Blaski i cienie pracy Project Managera.pptx
Blaski i cienie pracy Project Managera.pptxBlaski i cienie pracy Project Managera.pptx
Blaski i cienie pracy Project Managera.pptx
 
Refaktoryzacja
RefaktoryzacjaRefaktoryzacja
Refaktoryzacja
 
PHP 8.1
PHP 8.1PHP 8.1
PHP 8.1
 
Zarządzanie złożonością
Zarządzanie złożonościąZarządzanie złożonością
Zarządzanie złożonością
 
Clean Code
Clean CodeClean Code
Clean Code
 
Testy mutacyjne
Testy mutacyjneTesty mutacyjne
Testy mutacyjne
 
Bezpieczeństwo aplikacji webowych
Bezpieczeństwo aplikacji webowychBezpieczeństwo aplikacji webowych
Bezpieczeństwo aplikacji webowych
 
Wzorce projektowe w praktyce
Wzorce projektowe w praktyceWzorce projektowe w praktyce
Wzorce projektowe w praktyce
 
Sztuka samodoskonalenia programisty
Sztuka samodoskonalenia programistySztuka samodoskonalenia programisty
Sztuka samodoskonalenia programisty
 
Docker
DockerDocker
Docker
 
SOLID
SOLIDSOLID
SOLID
 
PSR czyli dobre praktyki programistyczne
PSR czyli dobre praktyki programistycznePSR czyli dobre praktyki programistyczne
PSR czyli dobre praktyki programistyczne
 

Testy jednostkowe - PHPUnit

  • 1. Testy jednostkowe - PHPUnit Czym są testy, dlaczego warto je pisać, podstawy frameworka PHPUnit. Przygotował Adam Dudel Aurora Creation / PHP Developer a.dudel@auroracreation.com
  • 2. Testy jednostkowe - PHPUnit Plan prezentacji ━━ Czym są testy jednostkowe? ━━ Po co piszemy testy? ━━ Wady i zalety ━━ PHPUnit ━━ Jak zacząć pracę z PHPUnit ━━ Trochę praktyki
  • 3. Czym są testy jednostkowe? Zadaniem testów jednostkowych jest testowanie logiki aplikacji. Aby to było możliwe i jednocześnie testy były zrozumiałe dla programisty, testowanie logiki odbywa się w małych częściach.
  • 4. Po co piszemy testy? Celem testów jednostkowych jest walidacja poprawnego działania małego fragmentu aplikacji. Pod pojęciem małego fragmentu aplikacji rozumiemy najmniejszą możliwą jednostkę aplikacji. W przypadku testów jednostkowych należy wspomnieć o izolacji testowanej jednostki od wpływu czynników zewnętrznych. Ma to na celu skupić się w teście tylko i wyłącznie na konkretnej testowanej funkcjonalności. Tu z pomocą przychodzą Mocki, czyli “atrapy obiektów”. Mock jest imitacją obiektu podstawioną w miejsce obiektu rzeczywistego.
  • 5. Test Driven Development - technika pisania testów składająca się z 3 etapów: ● RED ● GREEN ● REFACTOR TDD
  • 6. Zalety pisania testów jednostkowych ━━ sprawdzenie poprawności poszczególnych części kodu, poznawanie funkcjonalności ━━ uniknięcie komplikacji po merge’ach ━━ wymuszenie pisania kodu “testowalnego” ━━ większa kontrola nad własnym kodem ━━ szybsza refaktoryzacja
  • 7. Wady pisania testów jednostkowych ━━ czas na naukę i pisanie testów ━━ wymagają pisania przemyślanego kodu ━━ nie każdy kod da się przetestować
  • 8. Kiedy nie warto testować? ━━ w przypadku bardzo prostych aplikacji ━━ gdy aplikacja nie będzie dalej rozwijana ━━ prototypy
  • 9. Framework PHPUnit PHPUnit to framework testów jednostkowych, napisany przez Sebastiana Bergmanna. Tak jak w przypadku podobnych bibliotek do testów używa on tzw. asercji, które sprawdzają jak zachowuje się kod poddany testom.
  • 10. Czym jest asercja? W programowaniu asercja (ang.assertion) to predykat (forma zdaniowa w danym języku, która zwraca prawdę lub fałsz), umieszczony w pewnym miejscu w kodzie. Asercja wskazuje, że programista zakłada, że predykat ów jest w danym miejscu prawdziwy. Źródło: Wikipedia
  • 11. Najczęściej używane asercje ━━ assertTrue, assertFalse, assertSame ━━ assertIsArray,assertContains, assertCount, assertEmpty ━━ assertIsInt, assertIsNumber, assertIsFloat, assertIsObject, assertIsString ━━ expectException
  • 12. Pokrycie kodu PHPUnit oferuje nam narzędzie do generowania raportu z pokrycia kodu naszymi testami. Używa w tym celu Xdebug. Jest to bardzo pomocne narzędzie, także w samym procesie pisania testów, dzięki któremu możemy na bieżąco obserwować co jest faktycznie testowane. Nie należy mocno sugerować się wskaźnikiem procentowego pokrycia kodu, jeśli testujemy przemyślany kod to większe znaczenie ma pokrycie testami newralgicznych części systemu.
  • 13. Jak zacząć pracę z PHPUnit? ━━ instalacja biblioteki za pomocą Composera ━━ przygotowanie pliku phpunit.xml ━━ testy prostej klasy do wysyłania wiadomości
  • 15. Plik phpunit.xml i struktura katalogów
  • 16. Klasa Mailer Na potrzeby prezentacji mamy prostą klasę służącą do wysyłania maili.
  • 17. Klasa Message Klasa Message w konstruktorze oczekuje implementacji Mailera oraz pozwala na ustalenie adresu e-mail.
  • 18. Test metody sendMessage Wynik wykonania testów: Test wykonał się poprawnie mimo że nie użyliśmy mocka dla klasy Mailer. Metody z klasy Mailer nie powinny się wykonywać - testujemy tylko klasę Message.
  • 19. Test metody sendMessage Wynik wykonania testów: Stworzyliśmy mocka, jednak testy przestały działać. Mock nie jest skonfigurowany.
  • 20. Test metody sendMessage Wynik wykonania testów: Skonfigurowany mock na wartości po których metoda send() powinna zwrócić true.
  • 21. Testy metody setEmail Wynik wykonania testów: Wynik wykonania testów:Test dla pustej wartości jest ok, jednak dla spacji jest błędny.
  • 22. Poprawienie metody setEmail Poprawiamy metodę setEmail(), usuwając zbędne spacje ze zmiennej za pomocą trim().
  • 23. Testy metody setEmail z użyciem Data Provider Wynik wykonania testów: Aby nie pisać oddzielnego sprawdzania dla każdego przypadku skorzystamy z Data Providera.
  • 24. Testy Klasy Message Wynik wykonania testów:
  • 25. Dziękuję za uwagę :) Pytania? a.dudel@auroracreation.com