SlideShare a Scribd company logo
1 of 34
Download to read offline
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

Web Design Basics for Kids: HTML & CSS
Web Design Basics for Kids: HTML & CSSWeb Design Basics for Kids: HTML & CSS
Web Design Basics for Kids: HTML & CSSAnnMarie Ppl
 
cascading style sheet ppt
cascading style sheet pptcascading style sheet ppt
cascading style sheet pptabhilashagupta
 
Introduction to html
Introduction to htmlIntroduction to html
Introduction to htmlveena parihar
 
Basic HTML
Basic HTMLBasic HTML
Basic HTMLSayan De
 
A Skeptics guide to functional style javascript
A Skeptics guide to functional style javascriptA Skeptics guide to functional style javascript
A Skeptics guide to functional style javascriptjonathanfmills
 
CSS3 Media Queries And Creating Adaptive Layouts
CSS3 Media Queries And Creating Adaptive LayoutsCSS3 Media Queries And Creating Adaptive Layouts
CSS3 Media Queries And Creating Adaptive LayoutsSvitlana Ivanytska
 
Hashing and Hash Tables
Hashing and Hash TablesHashing and Hash Tables
Hashing and Hash Tablesadil raja
 
Html Intro2
Html Intro2Html Intro2
Html Intro2mlackner
 
Basic Latex Typesetting - Session 1
Basic Latex Typesetting - Session 1Basic Latex Typesetting - Session 1
Basic Latex Typesetting - Session 1Kiel Granada
 
[OKKY 세미나] 정진욱 - 테스트하기 쉬운 코드로 개발하기
[OKKY 세미나] 정진욱 - 테스트하기 쉬운 코드로 개발하기[OKKY 세미나] 정진욱 - 테스트하기 쉬운 코드로 개발하기
[OKKY 세미나] 정진욱 - 테스트하기 쉬운 코드로 개발하기OKKY
 

What's hot (20)

Web Design Basics for Kids: HTML & CSS
Web Design Basics for Kids: HTML & CSSWeb Design Basics for Kids: HTML & CSS
Web Design Basics for Kids: HTML & CSS
 
HTML5 & CSS3
HTML5 & CSS3 HTML5 & CSS3
HTML5 & CSS3
 
cascading style sheet ppt
cascading style sheet pptcascading style sheet ppt
cascading style sheet ppt
 
Introduction to html
Introduction to htmlIntroduction to html
Introduction to html
 
Basic HTML
Basic HTMLBasic HTML
Basic HTML
 
HTML Fundamentals
HTML FundamentalsHTML Fundamentals
HTML Fundamentals
 
CSS
CSSCSS
CSS
 
CSS Introduction
CSS IntroductionCSS Introduction
CSS Introduction
 
A Skeptics guide to functional style javascript
A Skeptics guide to functional style javascriptA Skeptics guide to functional style javascript
A Skeptics guide to functional style javascript
 
CSS3 Media Queries And Creating Adaptive Layouts
CSS3 Media Queries And Creating Adaptive LayoutsCSS3 Media Queries And Creating Adaptive Layouts
CSS3 Media Queries And Creating Adaptive Layouts
 
Html and css
Html and cssHtml and css
Html and css
 
Hashing and Hash Tables
Hashing and Hash TablesHashing and Hash Tables
Hashing and Hash Tables
 
Basic html
Basic htmlBasic html
Basic html
 
Html Intro2
Html Intro2Html Intro2
Html Intro2
 
Basic Latex Typesetting - Session 1
Basic Latex Typesetting - Session 1Basic Latex Typesetting - Session 1
Basic Latex Typesetting - Session 1
 
3. Java Script
3. Java Script3. Java Script
3. Java Script
 
HTML & CSS Masterclass
HTML & CSS MasterclassHTML & CSS Masterclass
HTML & CSS Masterclass
 
[OKKY 세미나] 정진욱 - 테스트하기 쉬운 코드로 개발하기
[OKKY 세미나] 정진욱 - 테스트하기 쉬운 코드로 개발하기[OKKY 세미나] 정진욱 - 테스트하기 쉬운 코드로 개발하기
[OKKY 세미나] 정진욱 - 테스트하기 쉬운 코드로 개발하기
 
Advanced Cascading Style Sheets
Advanced Cascading Style SheetsAdvanced Cascading Style Sheets
Advanced Cascading Style Sheets
 
Css3
Css3Css3
Css3
 

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
 
Wzorce projektowe w praktyce
Wzorce projektowe w praktyceWzorce projektowe w praktyce
Wzorce projektowe w praktycePHPstokPHPstok
 

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
 
Wprowadzenie do PHPUnit
Wprowadzenie do PHPUnitWprowadzenie do PHPUnit
Wprowadzenie do PHPUnit
 
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
 
Wzorce projektowe w praktyce
Wzorce projektowe w praktyceWzorce projektowe w praktyce
Wzorce projektowe w praktyce
 

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