SlideShare a Scribd company logo
PHPUnit - jak zacząć pisać
testy automatyczne
Paweł Górski
kariera.droptica.pl
Poznaj nas:
● O firmie
● Ścieżka kariery
● Szkolenia i rozwój
● Benefity
● Praca zdalna
● Biura
● Projekty i klienci
● Po pracy
● Hardware i software
● Typowy dzień pracy
https://kariera.droptica.pl Social Media: #devtalks
Oferty pracy:
● Junior PHP Developer
○ 5 000 - 8 500 zł netto (B2B)
● PHP Fullstack Dev (Mid/Senior/TechLead)
○ MID: 9 500 - 12 800 zł netto (B2B)
○ SENIOR: 12 300 - 18 500 netto (B2B)
● Drupal Developer (Mid/Senior/TechLead)
○ MID: 10 500 - 13 500 zł netto (B2B)
○ SENIOR: 13 000 - 19 500 netto (B2B)
●Project Manager
○11 000 - 14 000 netto (B2B)
●Senior Product Designer
○11 500 - 18 000 netto (B2B)
Agenda
1. Co to jest PHPUnit
2. Instalacja, konfiguracja
3. Pisanie pierwszych testów
4. Odpalanie testów
5. Pytania
PHPUnit
PHPUnit – framework do testów jednostkowych dla języka programowania PHP. Jest członkiem rodziny frameworków xUnit
wywodzącej się z pakietu SUnit stworzonego przez Kenta Becka[2]. PHPUnit jest rozwijany przez Sebastiana Bergmanna.
PHPUnit oferuje programiście następujące możliwości:
1. Narzędzia do tworzenia testów jednostkowych i organizowania ich w hierarchiczne zestawy.
2. Interfejs linii komend do wykonywania testów
3. Dostawcy danych (ang. data providers) – generatory zestawów danych dla testów pozwalające sprawdzić, jak pojedynczy test
zachowuje się dla różnych danych wejściowych.
4. Wsparcie dla testowania kodu korzystającego z baz danych.
5. Możliwość testowania wyjątków.
6. Wsparcie dla makiet obiektów (ang. mock objects)
7. Generator raportów
8. Generator raportów pokrycia kodu (wymaga XDebug)
9. Współpraca z narzędziem Selenium do testowania interfejsów użytkownika
https://www.phpunit.de/
http://sebastian-bergmann.de/
PHPUnit
https://www.guru99.com/unit-testing-guide.html
https://softwareskill.pl/piramida-testow
https://blog.termian.dev/pl/posty/kategoryzacja-test%C3%B3w-zestawy-zr%C3%B3wnoleglanie/
Co dają nam testy jednostkowe?
1. Redukcja małych i powtarzanych błędów.
2. Potwierdzają że kod działa tak jak myślisz, że działa.
3. Są szybkie i działają w sposób automatyczny.
4. Sprawdzają mały fragmentu kodu (jednostkę), czyli klasę, metodę lub nawet zestaw klas z pakietu,
tworzących jedną, ale wciąż niewielką funkcjonalność.
5. Weryfikują działanie kodu pod względem logicznym, sprawdzają wiele warunków brzegowych.
6. Można testować bez uruchamiania całego systemu.
7. Mogą zredukować prawdopodobieństwo błędów regresji.
https://softwareskill.pl/piramida-testow
Czy Unit test chronią w 100%
przed bugami?
Czego nam nie dają nam testy
jednostkowe?
1. Nie dają pewności, że po implementacji klas ze sobą, cała funkcjonalność działa poprawnie.
2. Nie gwarantują wyeliminowania bugów.
https://devstyle.pl/2020/06/25/mega-pigula-wiedzy-o-testach-jednostkowych/
Instalacja
Composer
composer require --dev phpunit/phpunit ^9
Środowisko
{
"name": "root/www",
"require": {
"phpunit/phpunit": "^9.5"
},
"autoload": {
"psr-4": {
"App":"src"
}
},
"authors": [
{
"name": "Pawel Gorski",
"email": "gp@gorskipawel.pl"
}
]
}
phpunit.xml
Testowanie
➜ ./vendor/bin/phpunit tests
Lub konfigurujemy Php Storma.
Komenda wyszukuje wszystkie testy z *Test.php w katalogu
Storm
Co potrzebujemy?
PHPSTORM
PHP 7+
XDEBUG
Projekt z composer + phpUnit
Storm
Storm
Storm
Pierwszy test
Pierwszy test
Klasa testowana:
ShowMessage
<?php
declare(strict_types=1);
namespace App;
class ShowMessage
{
private string $message;
public function printMessage() {
echo $this->getMessage();
}
public function getMessage(): string
{
return $this->message;
}
/**
* @param string $message
*/
public function setMessage(string $message): void
{
$this->message = $message;
}
}
Test
<?php
declare(strict_types=1);
namespace AppShowMessage;
use PHPUnitFrameworkTestCase;
class ShowMessageTest extends TestCase
{
public function testPrintMessage()
{
}
}
Testujemy
lub ./vendor/bin/phpunit tests
Testujemy
Testujemy
OK zepsujemy coś
OK zepsujemy coś
● assertAttributeSame
● assertAttributeType
● assertClassHasAttribute
● assertClassHasStaticAttribute
● assertClassNotHasAttribute
● assertClassNotHasStaticAttribute
● assertContains
● assertContainsOnly
● assertEmpty
● assertEquals
● assertEqualXMLStructure
● assertFalse
● assertFileEquals
● assertFileExists
● assertFileNotEquals
● assertFileNotExists
● assertGreaterThan
● assertGreaterThanOrEqual
● assertInstanceOf
● assertInternalType
● assertLessThan
● assertLessThanOrEqual
● assertNotContains
● assertNotContainsOnly
● arrayHasKey
● assertArrayHasKey
● assertArrayNotHasKey
● assertAttributeContains
● assertAttributeContainsOnly
● assertAttributeEmpty
● assertAttributeEquals
● assertAttributeGreaterThan
● assertAttributeGreaterThanOrEqua
l
● assertAttributeInstanceOf
● assertAttributeInternalType
● assertAttributeLessThan
● assertAttributeLessThanOrEqual
● assertAttributeNotContains
● assertAttributeNotContainsOnly
● assertAttributeNotEmpty
● assertAttributeNotEquals
● assertAttributeNotInstanceOf
● assertAttributeNotInternalType
● assertAttributeNotSame
● assertAttributeNotType
● assertNotEmpty
● assertNotEquals
● assertNotInstanceOf
● assertNotInternalType
● assertNotNull
● assertNotRegExp
● assertNotSame
● assertNotTag
● assertNotType
● assertNull
● assertObjectHasAttribute
● assertObjectNotHasAttribute
● assertRegExp
● assertSame
● assertSelectCount
● assertSelectEquals
● assertSelectRegExp
● assertStringEndsNotWith
● assertStringEndsWith
● assertStringEqualsFile
● assertStringMatchesFormat
● assertStringMatchesFormatFile
● assertStringNotEqualsFile
Co można sprawdzać
Data providers
Data providers to przydatna funkcja PHPUnit, która pozwala uruchomić ten sam test z różnymi
danymi wejściowymi i oczekiwanymi wynikami.
Mogą być użyty jedną lub więcej. Dodajemy przez adnotacje @dataProvider .
Metody dostawcy danych muszą być publiczne i muszą albo zwracać tablicę tablic, albo obiekt,
który powinien implementować interfejs Iterator.
Data providers
OK zepsujemy coś
extends TestCase
Pokrycie %
Drupal - Kernel tests
Większość testów w Drupalu bazuje na PHPUnit . W Drupalu mamy 4 rodzaje testów PHPUnit:
● Unit: testy oparte na PHPUnit z minimalnymi zależnościami. Klasa bazowa: Klasa
DrupalTestsUnitTestCase.
● Kernel: testy oparte na PHPUnit z kernelem i z włączoną minimalną liczbą rozszerzeń. Klasa bazowa:
Klasa DrupalKernelTestsKernelTestBase.
● Functional: testy oparte na PHPUnit z w pełni uruchomioną instancją Drupala. Klasa bazowa:
DrupalTestsBrowserTestBase.
● FunctionalJavascript: Testy oparte na PHPUnit, które wykorzystują Webdriver do przeprowadzania
testów funkcjonalności JavaScript i Ajax w przeglądarce. Klasa bazowa:
DrupalFunctionalJavascriptTestsWebDriverTestBase.
Visual Ception
To by było na tyle
Pytania?
Dziękuję za
wasz cenny czas!
Imię i Nazwisko autora
Paweł Górski
pawel.gorski@droptica.com
gp@gorskipawel.pl
Dane Kontaktowe
WWW.DROPTICA.COM

More Related Content

What's hot

Test Driven Development with PHPUnit
Test Driven Development with PHPUnitTest Driven Development with PHPUnit
Test Driven Development with PHPUnitMindfire Solutions
 
Abstract Factory Design Pattern
Abstract Factory Design PatternAbstract Factory Design Pattern
Abstract Factory Design PatternBharat Khatri
 
Solid Principles & Design patterns with PHP examples
Solid Principles & Design patterns with PHP examplesSolid Principles & Design patterns with PHP examples
Solid Principles & Design patterns with PHP examplesFederico Damián Lozada Mosto
 
Android Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUKAndroid Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUKFabio Collini
 
TypeScript Seminar
TypeScript SeminarTypeScript Seminar
TypeScript SeminarHaim Michael
 
7 rules of simple and maintainable code
7 rules of simple and maintainable code7 rules of simple and maintainable code
7 rules of simple and maintainable codeGeshan Manandhar
 
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysLoiane Groner
 
operator overloading & type conversion in cpp
operator overloading & type conversion in cppoperator overloading & type conversion in cpp
operator overloading & type conversion in cppgourav kottawar
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnitelliando dias
 
C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기OnGameServer
 
PHP Frameworks and CodeIgniter
PHP Frameworks and CodeIgniterPHP Frameworks and CodeIgniter
PHP Frameworks and CodeIgniterKHALID C
 
Tratamento de exceções java
Tratamento de exceções   javaTratamento de exceções   java
Tratamento de exceções javaAntonio Oliveira
 

What's hot (20)

PHP Basic & Variables
PHP Basic & VariablesPHP Basic & Variables
PHP Basic & Variables
 
MVC in PHP
MVC in PHPMVC in PHP
MVC in PHP
 
Test Driven Development with PHPUnit
Test Driven Development with PHPUnitTest Driven Development with PHPUnit
Test Driven Development with PHPUnit
 
Exception handling
Exception handlingException handling
Exception handling
 
Abstract Factory Design Pattern
Abstract Factory Design PatternAbstract Factory Design Pattern
Abstract Factory Design Pattern
 
Solid Principles & Design patterns with PHP examples
Solid Principles & Design patterns with PHP examplesSolid Principles & Design patterns with PHP examples
Solid Principles & Design patterns with PHP examples
 
Android Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUKAndroid Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUK
 
Spring MVC - QConSP
Spring MVC - QConSPSpring MVC - QConSP
Spring MVC - QConSP
 
POO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em JavaPOO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em Java
 
TypeScript Seminar
TypeScript SeminarTypeScript Seminar
TypeScript Seminar
 
7 rules of simple and maintainable code
7 rules of simple and maintainable code7 rules of simple and maintainable code
7 rules of simple and maintainable code
 
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
 
operator overloading & type conversion in cpp
operator overloading & type conversion in cppoperator overloading & type conversion in cpp
operator overloading & type conversion in cpp
 
Php oop presentation
Php   oop presentationPhp   oop presentation
Php oop presentation
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기
 
Javascript Exercises
Javascript ExercisesJavascript Exercises
Javascript Exercises
 
PHP Frameworks and CodeIgniter
PHP Frameworks and CodeIgniterPHP Frameworks and CodeIgniter
PHP Frameworks and CodeIgniter
 
Java programming-examples
Java programming-examplesJava programming-examples
Java programming-examples
 
Tratamento de exceções java
Tratamento de exceções   javaTratamento de exceções   java
Tratamento de exceções java
 

Similar to PHPUnit - jak zacząć pisać testy automatyczne [PL]

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
 
Architektura to nie bzdura
Architektura to nie bzduraArchitektura to nie bzdura
Architektura to nie bzduraPawel Szulc
 
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]Droptica
 
Testy jednostkowe - PHPUnit
Testy jednostkowe - PHPUnitTesty jednostkowe - PHPUnit
Testy jednostkowe - PHPUnitPHPstokPHPstok
 
Strategie automatyzacji testow
Strategie automatyzacji testowStrategie automatyzacji testow
Strategie automatyzacji testowWiktor Żołnowski
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztatyintive
 
Girls in IT - QA
Girls in IT - QA Girls in IT - QA
Girls in IT - QA monterail
 
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Tomasz Dziuda
 
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
 
SkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel DecSkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel Deckraqa
 
Domain Driven Development
Domain Driven DevelopmentDomain Driven Development
Domain Driven DevelopmentKonrad Russa
 
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP3camp
 
[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariować[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariowaćJakub Marchwicki
 
Zwinność w praktyce, Jarek Potiuk
Zwinność w praktyce, Jarek PotiukZwinność w praktyce, Jarek Potiuk
Zwinność w praktyce, Jarek PotiukMamStartup
 
Django od developerki po produkcję (linux)
Django od developerki po produkcję (linux)Django od developerki po produkcję (linux)
Django od developerki po produkcję (linux)Marcin Grzybowski
 
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
 
Maciej Ostrowski: Podstawy implementacji multi-inwentarza w Magento
Maciej Ostrowski: Podstawy implementacji multi-inwentarza w MagentoMaciej Ostrowski: Podstawy implementacji multi-inwentarza w Magento
Maciej Ostrowski: Podstawy implementacji multi-inwentarza w MagentoMeet Magento Poland
 

Similar to PHPUnit - jak zacząć pisać testy automatyczne [PL] (20)

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
 
Architektura to nie bzdura
Architektura to nie bzduraArchitektura to nie bzdura
Architektura to nie bzdura
 
Refaktoryzacja
RefaktoryzacjaRefaktoryzacja
Refaktoryzacja
 
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]
 
Testy jednostkowe - PHPUnit
Testy jednostkowe - PHPUnitTesty jednostkowe - PHPUnit
Testy jednostkowe - PHPUnit
 
Strategie automatyzacji testow
Strategie automatyzacji testowStrategie automatyzacji testow
Strategie automatyzacji testow
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztaty
 
Girls in IT - QA
Girls in IT - QA Girls in IT - QA
Girls in IT - QA
 
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014
 
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)
 
university day 1
university day 1university day 1
university day 1
 
SkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel DecSkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel Dec
 
Domain Driven Development
Domain Driven DevelopmentDomain Driven Development
Domain Driven Development
 
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP
 
[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariować[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariować
 
Zwinność w praktyce, Jarek Potiuk
Zwinność w praktyce, Jarek PotiukZwinność w praktyce, Jarek Potiuk
Zwinność w praktyce, Jarek Potiuk
 
Django od developerki po produkcję (linux)
Django od developerki po produkcję (linux)Django od developerki po produkcję (linux)
Django od developerki po produkcję (linux)
 
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
 
Maciej Ostrowski: Podstawy implementacji multi-inwentarza w Magento
Maciej Ostrowski: Podstawy implementacji multi-inwentarza w MagentoMaciej Ostrowski: Podstawy implementacji multi-inwentarza w Magento
Maciej Ostrowski: Podstawy implementacji multi-inwentarza w Magento
 
Agile & Scrum podstawy
Agile & Scrum podstawyAgile & Scrum podstawy
Agile & Scrum podstawy
 

More from Droptica

Business development w praktyce - jak skutecznie sprzedawać software [PL]
Business development w praktyce - jak skutecznie sprzedawać software [PL]Business development w praktyce - jak skutecznie sprzedawać software [PL]
Business development w praktyce - jak skutecznie sprzedawać software [PL]Droptica
 
Komunikacja w zespole projektowym [PL]
Komunikacja w zespole projektowym [PL]Komunikacja w zespole projektowym [PL]
Komunikacja w zespole projektowym [PL]Droptica
 
Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Droptica
 
Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]Droptica
 
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]Droptica
 
Strona w rękach klienta: o czym pamiętać, aby ułatwić pracę edytorom treści [PL]
Strona w rękach klienta: o czym pamiętać, aby ułatwić pracę edytorom treści [PL]Strona w rękach klienta: o czym pamiętać, aby ułatwić pracę edytorom treści [PL]
Strona w rękach klienta: o czym pamiętać, aby ułatwić pracę edytorom treści [PL]Droptica
 
Headless CMS w PZPN na bazie Drupala [PL]
Headless CMS w PZPN na bazie Drupala [PL]Headless CMS w PZPN na bazie Drupala [PL]
Headless CMS w PZPN na bazie Drupala [PL]Droptica
 
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]Droptica
 
Devel - przegląd możliwości modułu [PL]
Devel - przegląd możliwości modułu [PL]Devel - przegląd możliwości modułu [PL]
Devel - przegląd możliwości modułu [PL]Droptica
 
Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]
Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]
Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]Droptica
 
Od środowiska developerskiego do produkcji [PL]
Od środowiska developerskiego do produkcji [PL]Od środowiska developerskiego do produkcji [PL]
Od środowiska developerskiego do produkcji [PL]Droptica
 
Nowości w drupal 9 i 10 [PL]
Nowości w drupal 9 i 10 [PL]Nowości w drupal 9 i 10 [PL]
Nowości w drupal 9 i 10 [PL]Droptica
 
Skuteczna komunikacja w projekcie informatycznym [PL]
Skuteczna komunikacja w projekcie informatycznym [PL]Skuteczna komunikacja w projekcie informatycznym [PL]
Skuteczna komunikacja w projekcie informatycznym [PL]Droptica
 
Droopler: instalacja z użyciem composer i przykład budowy prostej strony firm...
Droopler: instalacja z użyciem composer i przykład budowy prostej strony firm...Droopler: instalacja z użyciem composer i przykład budowy prostej strony firm...
Droopler: instalacja z użyciem composer i przykład budowy prostej strony firm...Droptica
 
Rest API w Drupalu - działanie i definicja własnych endpointów [PL]
Rest API w Drupalu - działanie i definicja własnych endpointów [PL]Rest API w Drupalu - działanie i definicja własnych endpointów [PL]
Rest API w Drupalu - działanie i definicja własnych endpointów [PL]Droptica
 
Open social - przegląd możliwości dystrybucji [PL]
Open social - przegląd możliwości dystrybucji [PL]Open social - przegląd możliwości dystrybucji [PL]
Open social - przegląd możliwości dystrybucji [PL]Droptica
 
Mapy i geolokalizacja w Drupalu [PL]
Mapy i geolokalizacja w Drupalu [PL]Mapy i geolokalizacja w Drupalu [PL]
Mapy i geolokalizacja w Drupalu [PL]Droptica
 
Drush - najbardziej przydatne komendy oraz tworzenie własnej prostej komendy ...
Drush - najbardziej przydatne komendy oraz tworzenie własnej prostej komendy ...Drush - najbardziej przydatne komendy oraz tworzenie własnej prostej komendy ...
Drush - najbardziej przydatne komendy oraz tworzenie własnej prostej komendy ...Droptica
 
Search API i Faceted Search - podstawowa konfiguracja i przykłady użycia [PL]
Search API i Faceted Search - podstawowa konfiguracja i przykłady użycia [PL]Search API i Faceted Search - podstawowa konfiguracja i przykłady użycia [PL]
Search API i Faceted Search - podstawowa konfiguracja i przykłady użycia [PL]Droptica
 
Drupal multisite i domain access - kiedy, jak i dlaczego [PL]
Drupal multisite i domain access - kiedy, jak i dlaczego [PL]Drupal multisite i domain access - kiedy, jak i dlaczego [PL]
Drupal multisite i domain access - kiedy, jak i dlaczego [PL]Droptica
 

More from Droptica (20)

Business development w praktyce - jak skutecznie sprzedawać software [PL]
Business development w praktyce - jak skutecznie sprzedawać software [PL]Business development w praktyce - jak skutecznie sprzedawać software [PL]
Business development w praktyce - jak skutecznie sprzedawać software [PL]
 
Komunikacja w zespole projektowym [PL]
Komunikacja w zespole projektowym [PL]Komunikacja w zespole projektowym [PL]
Komunikacja w zespole projektowym [PL]
 
Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]
 
Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]
 
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
 
Strona w rękach klienta: o czym pamiętać, aby ułatwić pracę edytorom treści [PL]
Strona w rękach klienta: o czym pamiętać, aby ułatwić pracę edytorom treści [PL]Strona w rękach klienta: o czym pamiętać, aby ułatwić pracę edytorom treści [PL]
Strona w rękach klienta: o czym pamiętać, aby ułatwić pracę edytorom treści [PL]
 
Headless CMS w PZPN na bazie Drupala [PL]
Headless CMS w PZPN na bazie Drupala [PL]Headless CMS w PZPN na bazie Drupala [PL]
Headless CMS w PZPN na bazie Drupala [PL]
 
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]
 
Devel - przegląd możliwości modułu [PL]
Devel - przegląd możliwości modułu [PL]Devel - przegląd możliwości modułu [PL]
Devel - przegląd możliwości modułu [PL]
 
Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]
Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]
Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]
 
Od środowiska developerskiego do produkcji [PL]
Od środowiska developerskiego do produkcji [PL]Od środowiska developerskiego do produkcji [PL]
Od środowiska developerskiego do produkcji [PL]
 
Nowości w drupal 9 i 10 [PL]
Nowości w drupal 9 i 10 [PL]Nowości w drupal 9 i 10 [PL]
Nowości w drupal 9 i 10 [PL]
 
Skuteczna komunikacja w projekcie informatycznym [PL]
Skuteczna komunikacja w projekcie informatycznym [PL]Skuteczna komunikacja w projekcie informatycznym [PL]
Skuteczna komunikacja w projekcie informatycznym [PL]
 
Droopler: instalacja z użyciem composer i przykład budowy prostej strony firm...
Droopler: instalacja z użyciem composer i przykład budowy prostej strony firm...Droopler: instalacja z użyciem composer i przykład budowy prostej strony firm...
Droopler: instalacja z użyciem composer i przykład budowy prostej strony firm...
 
Rest API w Drupalu - działanie i definicja własnych endpointów [PL]
Rest API w Drupalu - działanie i definicja własnych endpointów [PL]Rest API w Drupalu - działanie i definicja własnych endpointów [PL]
Rest API w Drupalu - działanie i definicja własnych endpointów [PL]
 
Open social - przegląd możliwości dystrybucji [PL]
Open social - przegląd możliwości dystrybucji [PL]Open social - przegląd możliwości dystrybucji [PL]
Open social - przegląd możliwości dystrybucji [PL]
 
Mapy i geolokalizacja w Drupalu [PL]
Mapy i geolokalizacja w Drupalu [PL]Mapy i geolokalizacja w Drupalu [PL]
Mapy i geolokalizacja w Drupalu [PL]
 
Drush - najbardziej przydatne komendy oraz tworzenie własnej prostej komendy ...
Drush - najbardziej przydatne komendy oraz tworzenie własnej prostej komendy ...Drush - najbardziej przydatne komendy oraz tworzenie własnej prostej komendy ...
Drush - najbardziej przydatne komendy oraz tworzenie własnej prostej komendy ...
 
Search API i Faceted Search - podstawowa konfiguracja i przykłady użycia [PL]
Search API i Faceted Search - podstawowa konfiguracja i przykłady użycia [PL]Search API i Faceted Search - podstawowa konfiguracja i przykłady użycia [PL]
Search API i Faceted Search - podstawowa konfiguracja i przykłady użycia [PL]
 
Drupal multisite i domain access - kiedy, jak i dlaczego [PL]
Drupal multisite i domain access - kiedy, jak i dlaczego [PL]Drupal multisite i domain access - kiedy, jak i dlaczego [PL]
Drupal multisite i domain access - kiedy, jak i dlaczego [PL]
 

PHPUnit - jak zacząć pisać testy automatyczne [PL]

  • 1. PHPUnit - jak zacząć pisać testy automatyczne Paweł Górski
  • 2. kariera.droptica.pl Poznaj nas: ● O firmie ● Ścieżka kariery ● Szkolenia i rozwój ● Benefity ● Praca zdalna ● Biura ● Projekty i klienci ● Po pracy ● Hardware i software ● Typowy dzień pracy https://kariera.droptica.pl Social Media: #devtalks Oferty pracy: ● Junior PHP Developer ○ 5 000 - 8 500 zł netto (B2B) ● PHP Fullstack Dev (Mid/Senior/TechLead) ○ MID: 9 500 - 12 800 zł netto (B2B) ○ SENIOR: 12 300 - 18 500 netto (B2B) ● Drupal Developer (Mid/Senior/TechLead) ○ MID: 10 500 - 13 500 zł netto (B2B) ○ SENIOR: 13 000 - 19 500 netto (B2B) ●Project Manager ○11 000 - 14 000 netto (B2B) ●Senior Product Designer ○11 500 - 18 000 netto (B2B)
  • 3. Agenda 1. Co to jest PHPUnit 2. Instalacja, konfiguracja 3. Pisanie pierwszych testów 4. Odpalanie testów 5. Pytania
  • 4. PHPUnit PHPUnit – framework do testów jednostkowych dla języka programowania PHP. Jest członkiem rodziny frameworków xUnit wywodzącej się z pakietu SUnit stworzonego przez Kenta Becka[2]. PHPUnit jest rozwijany przez Sebastiana Bergmanna. PHPUnit oferuje programiście następujące możliwości: 1. Narzędzia do tworzenia testów jednostkowych i organizowania ich w hierarchiczne zestawy. 2. Interfejs linii komend do wykonywania testów 3. Dostawcy danych (ang. data providers) – generatory zestawów danych dla testów pozwalające sprawdzić, jak pojedynczy test zachowuje się dla różnych danych wejściowych. 4. Wsparcie dla testowania kodu korzystającego z baz danych. 5. Możliwość testowania wyjątków. 6. Wsparcie dla makiet obiektów (ang. mock objects) 7. Generator raportów 8. Generator raportów pokrycia kodu (wymaga XDebug) 9. Współpraca z narzędziem Selenium do testowania interfejsów użytkownika https://www.phpunit.de/ http://sebastian-bergmann.de/
  • 6. Co dają nam testy jednostkowe? 1. Redukcja małych i powtarzanych błędów. 2. Potwierdzają że kod działa tak jak myślisz, że działa. 3. Są szybkie i działają w sposób automatyczny. 4. Sprawdzają mały fragmentu kodu (jednostkę), czyli klasę, metodę lub nawet zestaw klas z pakietu, tworzących jedną, ale wciąż niewielką funkcjonalność. 5. Weryfikują działanie kodu pod względem logicznym, sprawdzają wiele warunków brzegowych. 6. Można testować bez uruchamiania całego systemu. 7. Mogą zredukować prawdopodobieństwo błędów regresji. https://softwareskill.pl/piramida-testow
  • 7. Czy Unit test chronią w 100% przed bugami?
  • 8. Czego nam nie dają nam testy jednostkowe? 1. Nie dają pewności, że po implementacji klas ze sobą, cała funkcjonalność działa poprawnie. 2. Nie gwarantują wyeliminowania bugów. https://devstyle.pl/2020/06/25/mega-pigula-wiedzy-o-testach-jednostkowych/
  • 10. Composer composer require --dev phpunit/phpunit ^9
  • 11. Środowisko { "name": "root/www", "require": { "phpunit/phpunit": "^9.5" }, "autoload": { "psr-4": { "App":"src" } }, "authors": [ { "name": "Pawel Gorski", "email": "gp@gorskipawel.pl" } ] }
  • 13. Testowanie ➜ ./vendor/bin/phpunit tests Lub konfigurujemy Php Storma. Komenda wyszukuje wszystkie testy z *Test.php w katalogu
  • 15. Storm
  • 16. Storm
  • 17. Storm
  • 19. Pierwszy test Klasa testowana: ShowMessage <?php declare(strict_types=1); namespace App; class ShowMessage { private string $message; public function printMessage() { echo $this->getMessage(); } public function getMessage(): string { return $this->message; } /** * @param string $message */ public function setMessage(string $message): void { $this->message = $message; } } Test <?php declare(strict_types=1); namespace AppShowMessage; use PHPUnitFrameworkTestCase; class ShowMessageTest extends TestCase { public function testPrintMessage() { } }
  • 25. ● assertAttributeSame ● assertAttributeType ● assertClassHasAttribute ● assertClassHasStaticAttribute ● assertClassNotHasAttribute ● assertClassNotHasStaticAttribute ● assertContains ● assertContainsOnly ● assertEmpty ● assertEquals ● assertEqualXMLStructure ● assertFalse ● assertFileEquals ● assertFileExists ● assertFileNotEquals ● assertFileNotExists ● assertGreaterThan ● assertGreaterThanOrEqual ● assertInstanceOf ● assertInternalType ● assertLessThan ● assertLessThanOrEqual ● assertNotContains ● assertNotContainsOnly ● arrayHasKey ● assertArrayHasKey ● assertArrayNotHasKey ● assertAttributeContains ● assertAttributeContainsOnly ● assertAttributeEmpty ● assertAttributeEquals ● assertAttributeGreaterThan ● assertAttributeGreaterThanOrEqua l ● assertAttributeInstanceOf ● assertAttributeInternalType ● assertAttributeLessThan ● assertAttributeLessThanOrEqual ● assertAttributeNotContains ● assertAttributeNotContainsOnly ● assertAttributeNotEmpty ● assertAttributeNotEquals ● assertAttributeNotInstanceOf ● assertAttributeNotInternalType ● assertAttributeNotSame ● assertAttributeNotType ● assertNotEmpty ● assertNotEquals ● assertNotInstanceOf ● assertNotInternalType ● assertNotNull ● assertNotRegExp ● assertNotSame ● assertNotTag ● assertNotType ● assertNull ● assertObjectHasAttribute ● assertObjectNotHasAttribute ● assertRegExp ● assertSame ● assertSelectCount ● assertSelectEquals ● assertSelectRegExp ● assertStringEndsNotWith ● assertStringEndsWith ● assertStringEqualsFile ● assertStringMatchesFormat ● assertStringMatchesFormatFile ● assertStringNotEqualsFile Co można sprawdzać
  • 26. Data providers Data providers to przydatna funkcja PHPUnit, która pozwala uruchomić ten sam test z różnymi danymi wejściowymi i oczekiwanymi wynikami. Mogą być użyty jedną lub więcej. Dodajemy przez adnotacje @dataProvider . Metody dostawcy danych muszą być publiczne i muszą albo zwracać tablicę tablic, albo obiekt, który powinien implementować interfejs Iterator.
  • 31. Drupal - Kernel tests Większość testów w Drupalu bazuje na PHPUnit . W Drupalu mamy 4 rodzaje testów PHPUnit: ● Unit: testy oparte na PHPUnit z minimalnymi zależnościami. Klasa bazowa: Klasa DrupalTestsUnitTestCase. ● Kernel: testy oparte na PHPUnit z kernelem i z włączoną minimalną liczbą rozszerzeń. Klasa bazowa: Klasa DrupalKernelTestsKernelTestBase. ● Functional: testy oparte na PHPUnit z w pełni uruchomioną instancją Drupala. Klasa bazowa: DrupalTestsBrowserTestBase. ● FunctionalJavascript: Testy oparte na PHPUnit, które wykorzystują Webdriver do przeprowadzania testów funkcjonalności JavaScript i Ajax w przeglądarce. Klasa bazowa: DrupalFunctionalJavascriptTestsWebDriverTestBase.
  • 33. To by było na tyle Pytania?
  • 34. Dziękuję za wasz cenny czas! Imię i Nazwisko autora Paweł Górski pawel.gorski@droptica.com gp@gorskipawel.pl Dane Kontaktowe WWW.DROPTICA.COM