Slide 1

Slide 1 text

Mockery ● @robertbasic ● https://github.com/robertbasic/ ● http://robertbasic.com/

Slide 2

Slide 2 text

Problemi sa unit testiranjem ● Kod koji koristi 3rd party servise i API-e ● Baze podataka ● Delovi koda koji nisu bitni za kod koji se trenutno testira

Slide 3

Slide 3 text

Kako resiti te probleme? ● Izbegavati pozive ka bazi ● Izbegavati pozive ka vanjskim servisima ● Izbegavati pozive ka delovima naseg koda koji nam nije interesantan ● Izmokovati pokretne delove

Slide 4

Slide 4 text

Sta koristiti? ● Mocking framework ● PHPUnit mock ● FBMock ● Phake ● ...

Slide 5

Slide 5 text

Mockery!

Slide 6

Slide 6 text

Sta je Mockery? ● Framework za pravljenje mock objekata ● Lako za koristenje sa PHPUnit-om (a verovatno i sa drugim PHP unit testing alatima) ● Mnogo lakse za koristenje nego mockovi ugradjeni u PHPUnit

Slide 7

Slide 7 text

Instalacija ● composer.json ● php composer.phar install --dev

Slide 8

Slide 8 text

Instalacija ● Ili preko pear-a ● Ili clone sa github-a ● https://github.com/padraic/mockery

Slide 9

Slide 9 text

Povezivanje sa PHPUnit-om ● Dodati listener u phpunit.xml

Slide 10

Slide 10 text

PHPUnit bootstrap ● Podesavanje autoload-a

Slide 11

Slide 11 text

Jednostavan primer ● Foo ima dependency na Bar ● Foo poziva metodu od Bar objekta koja vraca neki rezultat ● Ne zelimo da pozovemo pravu metodu, vec mockovanu ● Ovo postaje mnogo komplikovanije u stvarnom zivotu

Slide 12

Slide 12 text

Jednostavan primert

Slide 13

Slide 13 text

Method calls expectations ● shouldReceive('methodName'); ● once(), twice(), zeroOrMoreTimes(), times(n), never() ● Ako se ne postave ocekivanja moze doci do nenamernih gresaka

Slide 14

Slide 14 text

Method calls expectations

Slide 15

Slide 15 text

Validacija argumenata ● with($param1, $param2); ● withAnyArgs(); ● withNoArgs(); ● with(m::type('\Foo\Bar')); ● with($regex);

Slide 16

Slide 16 text

Povratne vrednosti ● andReturn($value); ● andReturn($firstRun, $secondRun, $thirdRun); ● andReturnUsing(function($x) { return $x * 2 }); ● andThrow(Exception);

Slide 17

Slide 17 text

Ali sve ovo mozete procitati i u dokumentaciji

Slide 18

Slide 18 text

Nesto realnih primera

Slide 19

Slide 19 text

You can't touch this – database!

Slide 20

Slide 20 text

You can't touch this – service!

Slide 21

Slide 21 text

You can't touch this – code!

Slide 22

Slide 22 text

Crazy bits ● Ne radi diff nad parametrima metoda tipa array tako da je tesko provaliti sta se ne slaze ● --process-isolation ne radi assertion count ● Reflection koji Mockery koristi zna da poblesavi sa PHP klasama, npr. SPL, Gearman ... ● __magic methods... just don't.

Slide 23

Slide 23 text

Hvala! ● Pitanja? ● @robertbasic ● https://github.com/padraic/mockery