SlideShare a Scribd company logo
TEST-DRIVEN DEVELOPMENT – TEORIJA I PRIMJERI
DRAGOŠ STRUGAR
O MENI
 Dragoš Strugar
 još u srednjoj
 najviše istražujem iOS i backend development
 Osvojio Hackathon 2016 Banjaluka
 idem na takmičenja inovacija u ZG, BL i NS
O ČEMU OVA PREZENTACIJA NIJE
 vrste testiranja
 potpun tutorijal kako koristiti TDD u Laravelu i Expressu
 nije za developere koji su već radili dosta sa TDDom, mada i oni možda nešto nauče
PRIJE NEGO ŠTO KAŽEM O ČEMU JE ZAPRAVO OVA PREZENTACIJA..
 Šta je Unit testing?
 Kako se ta vrsta testiranja razlikuje od ostalih vrsta testova?
 Zašto ovo pominjem?
O ČEMU JE OVA PREZENTACIJA
 UNIT testing, programerski testovi
 Automatizovano testiranje
 Razumijevanje TDD i Unit testing osnovnih pojmova
 Par primjera ovoga u Express.js i Laravel frameworcima
PAR PITANJA
 Koliko vas misli da je pisanje testova manje ili veće gubljenje vremena?
 Koliko vas piše testove u svojim aplikacijama?
 Koliko vas to radi TDD/BDD pristupom?
SVI TESTIRAJU…
 Uđi na browser, posjeti localhost/posts, vidi jesu li svi postovi izlistani
 Uđi u konzolu, vidi jesi li uspješno sačuvao/la novi post?
 itd..
…SAMO NEKI TO AUTOMATIZUJU
 napišu kod koji to provjeri za njih
 razmislite koliko bi vam to vremena uštedjelo
 dodamo novi feature za postove, samo izvrtimo testove da vidimo da li i dalje prolaze
 ne moramo tokom noći se pitati da li naš kod radi, ili ima neki bug, samo testiramo prije spavanja, easy..
ZA NEKE SLUČAJEVE OVO JE SASVIM DOVOLJNO
 recimo, hoćete dodati novi feature u vašu app koji ima baš mnogo slučajeva koji se trebaju provjeriti
 vaša app nije prevelika, niste testirali ništa u njoj, ali ovaj feature baš liči na nešto što bi se trebalo
testirati
 napišete testove samo za tu funkcionalnost
ALI, ZA VEĆINU NIJE..
 imate app koja je poprilično velika
 ima mnogo koda i mnogo slučajeva koji se trebaju testirati
 kad dodate novu funkcionalnost, ona možda sruši neki feature rađen prije..
 Full code coverage!
ŠTA TESTIRANJEM DOBIJATE?
 software koji nema bugova
 aplikaciju koja je spremna za produkciju
 developersku sreću jer znate da ste odradili
software kako treba
 DEVOPS
OVDJE STVARI POČINJU DA BUDU ZANIMLJIVE :D
 hajdemo zamisliti scenario u kojem bismo napisali prvo testove, a tek onda naš kod?
 Čekaj, mali, jesi ti normalan?
 Zar to ne bi značilo da naši testovi uvijek prvo padaju?
I ODGOVOR JE..
DA!
- pravićemo objekat, čak ako nemamo još napisanu klasu
- zvaćemo metodu koja ne postoji
i kad testove izvršimo, oni trebaju PASTI
AKO STE SHVATILI POGREŠNO…
 pisanje čitavog test koda prije pisanja jedne linije ”pravog” koda
 mart – pisanje testova
 april – pisanje koda koji prolazi testiranje
 POGREŠNO!
HAJDEMO PROMISLITI I NA DRUGI NAČIN
 test-driven
 znamo smjer u kojem trebamo razvijati našu aplikaciju
 u procesu razvoja, znamo TAČNO gdje se pojavljuju greške
 RED Green
 možda ovaj pristup i nije toliko loš..
RED-GREEN-REFACTOR
DOSTA TEORIJE, LET’S GET OUR HANDS DIRTY!
 koristimo frameworke za testiranje:
 PHPUnit – PHP
 JS – Mocha (Backend JavaScript here, folks)
 JUnit - Java
 NUnit - .NET
 PyUnit – Python
 CppUnit – C++
LARAVEL TDD UVOD
 nisam ekspert, ako neko vidi neku grešku u Laravel kodu, neka me slobodno prekine
 sve vam je built-in
 Hajdemo uzeti primjer pravljenja klase Movie koristeći TDD
MOVIE TEST- LARAVEL
- pravimo Movie.php sa običnim <?php class Movie{}
- u tests/ direktorijumu pravimo novi fajl, MovieTest.php
IZVRŠAVANJE TESTA - LARAVEL
 u rootu projekta kucate phpunit i dodatni argument može biti path do samo jednog testa, ili
direktorijuma u kom se nalazi više testova
 Dobićemo Test failed - PHP Fatal Error: ’AppMovie’ not found
 Ako u Movie.php dodamo namespace App i izvršimo testove, dobijamo drugi error:
 Call to undefined method AppMovie::name()
LARAVEL MOVIE CLASS
 Ako dodamo metodu name, pomoću public function name(){}
 Dobijamo sljedeći error:
 Failed asserting that null matches expected ’Star Wars’
VRIJEME ZA PITANJA - LARAVEL
 kako biste dodali pored imena filma, njegovog režisera (bonus poeni ako znate ko je to)?
 zapažate li problem koji će nam se desiti?
 setUp method! DRY, guys
public function setUp() {$this->movie = new Movie(‘Star Wars’ , ‘George Lucas’);}
LARAVEL - WEB
 za request/response je sve built in, pogledajmo primjer
PRIMJER NOVI U LARAVELU
 Posjetiti home page
 $this->visit(‘/’);
 Klikni na Click Me link
 $this->click(‘Click Me’);
 Dodati <a href=”#”>Click Me</a>
 Vidi ima li poruka ”Clicked”
 $this->see(‘Clicked’);
 Prepraviti link da bude href=“/feedback” -> dobijamo 404
 Dodati rutu /feeback koja vraća poruku “Clicked”
 Vidi da li je trenutni url /feedback
 $this->seePageIs(‘feedback’);
EXPRESS SADA…
 mochajs.org – asynchronous testing
 assertion library expect – eror poruke i mnoge druge pogodnosti
 supertest – za requeste (GET, POST, …) – ne moramo manualno provjeravati headere, status codove i sl.
TEST DRIVE IN EXPRESS
 Za ovaj primjer će nam trebati express, mocha, supertest i expect od NPM paketa
 Jedan fajl za server i jedan za test
 server.js i server.test.js
 napravimo u package.json alias
"scripts": {
"test": "mocha **/*.test.js"
},
TEST FAJL PRVO
NAKON
 ako odradimo npm test, dobijamo
AKO DODAMO SERVER.JS STVARI
PASS!
RESURSI ZA UČENJE
 Laravel - PHPUnit: https://phpunit.de/
 Express – Supertest/Mocha/Expect su na NPM, svi open-source
 https://github.com/visionmedia/supertest
 Za Laravel preporučujem od Laracasts Testing sekciju
 Za Express ne znam takav kurs, ali ima mnogo blog postova..
HVALA NA PAŽNJI
KONTAKT: FB.COM/DRAGIFY, ITSDRAGOS@GMAIL.COM

More Related Content

Viewers also liked

Backend, MVC, languages and frameworks for Backend
Backend, MVC, languages and frameworks for BackendBackend, MVC, languages and frameworks for Backend
Backend, MVC, languages and frameworks for Backend
Dragos Strugar
 
Laravel and SOLR
Laravel and SOLRLaravel and SOLR
Laravel and SOLR
Peter Steenbergen
 
All the Laravel things: up and running to making $$
All the Laravel things: up and running to making $$All the Laravel things: up and running to making $$
All the Laravel things: up and running to making $$
Joe Ferguson
 
PHPUnit best practices presentation
PHPUnit best practices presentationPHPUnit best practices presentation
PHPUnit best practices presentation
Thanh Robi
 
Test-Driven Development (TDD)
Test-Driven Development (TDD)Test-Driven Development (TDD)
Test-Driven Development (TDD)
Brian Rasmussen
 
(Have a) rest with Laravel
(Have a) rest with Laravel(Have a) rest with Laravel
(Have a) rest with Laravel
Commit University
 
Intro to Laravel PHP Framework
Intro to Laravel PHP FrameworkIntro to Laravel PHP Framework
Intro to Laravel PHP Framework
Bill Condo
 
凌波微步:wagon + VS Code 的輕功哲學
凌波微步:wagon + VS Code 的輕功哲學凌波微步:wagon + VS Code 的輕功哲學
凌波微步:wagon + VS Code 的輕功哲學
Shengyou Fan
 
Laravel 5.4
Laravel 5.4 Laravel 5.4
Laravel 5.4
Nisha Patel
 
Laravel Beginners Tutorial 1
Laravel Beginners Tutorial 1Laravel Beginners Tutorial 1
Laravel Beginners Tutorial 1
Vikas Chauhan
 
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
Shengyou Fan
 
DevOps叢林裡的小隊游擊戰術 (@ iThome DevOps 2015)
DevOps叢林裡的小隊游擊戰術 (@ iThome DevOps 2015)DevOps叢林裡的小隊游擊戰術 (@ iThome DevOps 2015)
DevOps叢林裡的小隊游擊戰術 (@ iThome DevOps 2015)
Chen Cheng-Wei
 
2015 Upload Campaigns Calendar - SlideShare
2015 Upload Campaigns Calendar - SlideShare2015 Upload Campaigns Calendar - SlideShare
2015 Upload Campaigns Calendar - SlideShare
SlideShare
 
What to Upload to SlideShare
What to Upload to SlideShareWhat to Upload to SlideShare
What to Upload to SlideShare
SlideShare
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShare
SlideShare
 

Viewers also liked (15)

Backend, MVC, languages and frameworks for Backend
Backend, MVC, languages and frameworks for BackendBackend, MVC, languages and frameworks for Backend
Backend, MVC, languages and frameworks for Backend
 
Laravel and SOLR
Laravel and SOLRLaravel and SOLR
Laravel and SOLR
 
All the Laravel things: up and running to making $$
All the Laravel things: up and running to making $$All the Laravel things: up and running to making $$
All the Laravel things: up and running to making $$
 
PHPUnit best practices presentation
PHPUnit best practices presentationPHPUnit best practices presentation
PHPUnit best practices presentation
 
Test-Driven Development (TDD)
Test-Driven Development (TDD)Test-Driven Development (TDD)
Test-Driven Development (TDD)
 
(Have a) rest with Laravel
(Have a) rest with Laravel(Have a) rest with Laravel
(Have a) rest with Laravel
 
Intro to Laravel PHP Framework
Intro to Laravel PHP FrameworkIntro to Laravel PHP Framework
Intro to Laravel PHP Framework
 
凌波微步:wagon + VS Code 的輕功哲學
凌波微步:wagon + VS Code 的輕功哲學凌波微步:wagon + VS Code 的輕功哲學
凌波微步:wagon + VS Code 的輕功哲學
 
Laravel 5.4
Laravel 5.4 Laravel 5.4
Laravel 5.4
 
Laravel Beginners Tutorial 1
Laravel Beginners Tutorial 1Laravel Beginners Tutorial 1
Laravel Beginners Tutorial 1
 
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
 
DevOps叢林裡的小隊游擊戰術 (@ iThome DevOps 2015)
DevOps叢林裡的小隊游擊戰術 (@ iThome DevOps 2015)DevOps叢林裡的小隊游擊戰術 (@ iThome DevOps 2015)
DevOps叢林裡的小隊游擊戰術 (@ iThome DevOps 2015)
 
2015 Upload Campaigns Calendar - SlideShare
2015 Upload Campaigns Calendar - SlideShare2015 Upload Campaigns Calendar - SlideShare
2015 Upload Campaigns Calendar - SlideShare
 
What to Upload to SlideShare
What to Upload to SlideShareWhat to Upload to SlideShare
What to Upload to SlideShare
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShare
 

Testing and TDD - Laravel and Express Examples

  • 1. TEST-DRIVEN DEVELOPMENT – TEORIJA I PRIMJERI DRAGOŠ STRUGAR
  • 2. O MENI  Dragoš Strugar  još u srednjoj  najviše istražujem iOS i backend development  Osvojio Hackathon 2016 Banjaluka  idem na takmičenja inovacija u ZG, BL i NS
  • 3. O ČEMU OVA PREZENTACIJA NIJE  vrste testiranja  potpun tutorijal kako koristiti TDD u Laravelu i Expressu  nije za developere koji su već radili dosta sa TDDom, mada i oni možda nešto nauče
  • 4. PRIJE NEGO ŠTO KAŽEM O ČEMU JE ZAPRAVO OVA PREZENTACIJA..  Šta je Unit testing?  Kako se ta vrsta testiranja razlikuje od ostalih vrsta testova?  Zašto ovo pominjem?
  • 5. O ČEMU JE OVA PREZENTACIJA  UNIT testing, programerski testovi  Automatizovano testiranje  Razumijevanje TDD i Unit testing osnovnih pojmova  Par primjera ovoga u Express.js i Laravel frameworcima
  • 6. PAR PITANJA  Koliko vas misli da je pisanje testova manje ili veće gubljenje vremena?  Koliko vas piše testove u svojim aplikacijama?  Koliko vas to radi TDD/BDD pristupom?
  • 7. SVI TESTIRAJU…  Uđi na browser, posjeti localhost/posts, vidi jesu li svi postovi izlistani  Uđi u konzolu, vidi jesi li uspješno sačuvao/la novi post?  itd..
  • 8. …SAMO NEKI TO AUTOMATIZUJU  napišu kod koji to provjeri za njih  razmislite koliko bi vam to vremena uštedjelo  dodamo novi feature za postove, samo izvrtimo testove da vidimo da li i dalje prolaze  ne moramo tokom noći se pitati da li naš kod radi, ili ima neki bug, samo testiramo prije spavanja, easy..
  • 9. ZA NEKE SLUČAJEVE OVO JE SASVIM DOVOLJNO  recimo, hoćete dodati novi feature u vašu app koji ima baš mnogo slučajeva koji se trebaju provjeriti  vaša app nije prevelika, niste testirali ništa u njoj, ali ovaj feature baš liči na nešto što bi se trebalo testirati  napišete testove samo za tu funkcionalnost
  • 10. ALI, ZA VEĆINU NIJE..  imate app koja je poprilično velika  ima mnogo koda i mnogo slučajeva koji se trebaju testirati  kad dodate novu funkcionalnost, ona možda sruši neki feature rađen prije..  Full code coverage!
  • 11. ŠTA TESTIRANJEM DOBIJATE?  software koji nema bugova  aplikaciju koja je spremna za produkciju  developersku sreću jer znate da ste odradili software kako treba  DEVOPS
  • 12. OVDJE STVARI POČINJU DA BUDU ZANIMLJIVE :D  hajdemo zamisliti scenario u kojem bismo napisali prvo testove, a tek onda naš kod?  Čekaj, mali, jesi ti normalan?  Zar to ne bi značilo da naši testovi uvijek prvo padaju?
  • 13. I ODGOVOR JE.. DA! - pravićemo objekat, čak ako nemamo još napisanu klasu - zvaćemo metodu koja ne postoji i kad testove izvršimo, oni trebaju PASTI
  • 14. AKO STE SHVATILI POGREŠNO…  pisanje čitavog test koda prije pisanja jedne linije ”pravog” koda  mart – pisanje testova  april – pisanje koda koji prolazi testiranje  POGREŠNO!
  • 15. HAJDEMO PROMISLITI I NA DRUGI NAČIN  test-driven  znamo smjer u kojem trebamo razvijati našu aplikaciju  u procesu razvoja, znamo TAČNO gdje se pojavljuju greške  RED Green  možda ovaj pristup i nije toliko loš..
  • 17. DOSTA TEORIJE, LET’S GET OUR HANDS DIRTY!  koristimo frameworke za testiranje:  PHPUnit – PHP  JS – Mocha (Backend JavaScript here, folks)  JUnit - Java  NUnit - .NET  PyUnit – Python  CppUnit – C++
  • 18. LARAVEL TDD UVOD  nisam ekspert, ako neko vidi neku grešku u Laravel kodu, neka me slobodno prekine  sve vam je built-in  Hajdemo uzeti primjer pravljenja klase Movie koristeći TDD
  • 19. MOVIE TEST- LARAVEL - pravimo Movie.php sa običnim <?php class Movie{} - u tests/ direktorijumu pravimo novi fajl, MovieTest.php
  • 20. IZVRŠAVANJE TESTA - LARAVEL  u rootu projekta kucate phpunit i dodatni argument može biti path do samo jednog testa, ili direktorijuma u kom se nalazi više testova  Dobićemo Test failed - PHP Fatal Error: ’AppMovie’ not found  Ako u Movie.php dodamo namespace App i izvršimo testove, dobijamo drugi error:  Call to undefined method AppMovie::name()
  • 21. LARAVEL MOVIE CLASS  Ako dodamo metodu name, pomoću public function name(){}  Dobijamo sljedeći error:  Failed asserting that null matches expected ’Star Wars’
  • 22. VRIJEME ZA PITANJA - LARAVEL  kako biste dodali pored imena filma, njegovog režisera (bonus poeni ako znate ko je to)?  zapažate li problem koji će nam se desiti?  setUp method! DRY, guys public function setUp() {$this->movie = new Movie(‘Star Wars’ , ‘George Lucas’);}
  • 23. LARAVEL - WEB  za request/response je sve built in, pogledajmo primjer
  • 24. PRIMJER NOVI U LARAVELU  Posjetiti home page  $this->visit(‘/’);  Klikni na Click Me link  $this->click(‘Click Me’);  Dodati <a href=”#”>Click Me</a>  Vidi ima li poruka ”Clicked”  $this->see(‘Clicked’);  Prepraviti link da bude href=“/feedback” -> dobijamo 404  Dodati rutu /feeback koja vraća poruku “Clicked”  Vidi da li je trenutni url /feedback  $this->seePageIs(‘feedback’);
  • 25. EXPRESS SADA…  mochajs.org – asynchronous testing  assertion library expect – eror poruke i mnoge druge pogodnosti  supertest – za requeste (GET, POST, …) – ne moramo manualno provjeravati headere, status codove i sl.
  • 26. TEST DRIVE IN EXPRESS  Za ovaj primjer će nam trebati express, mocha, supertest i expect od NPM paketa  Jedan fajl za server i jedan za test  server.js i server.test.js  napravimo u package.json alias "scripts": { "test": "mocha **/*.test.js" },
  • 28. NAKON  ako odradimo npm test, dobijamo
  • 30. PASS!
  • 31. RESURSI ZA UČENJE  Laravel - PHPUnit: https://phpunit.de/  Express – Supertest/Mocha/Expect su na NPM, svi open-source  https://github.com/visionmedia/supertest  Za Laravel preporučujem od Laracasts Testing sekciju  Za Express ne znam takav kurs, ali ima mnogo blog postova..
  • 32. HVALA NA PAŽNJI KONTAKT: FB.COM/DRAGIFY, ITSDRAGOS@GMAIL.COM