Slide 1

Slide 1 text

Code testing with PHP Martin Pernica | @martindeveloper čtvrtek, 25. července 13

Slide 2

Slide 2 text

Why code testing? • Reduce bugs in your code • Stable class API • Automatic feedback • More readable code (automatic docs) • It is cool :) čtvrtek, 25. července 13

Slide 3

Slide 3 text

Types of tests • Unit • Integration • System • Acceptance • ... and more Unit tests Integration tests Acceptance System tests čtvrtek, 25. července 13

Slide 4

Slide 4 text

Requirements • Fast • Timely • Independent • Repeatable • Self-validating • Short • Simple čtvrtek, 25. července 13

Slide 5

Slide 5 text

Testing is easy, if ... čtvrtek, 25. července 13

Slide 6

Slide 6 text

If you using Dependecy Injection DI is not about container! čtvrtek, 25. července 13

Slide 7

Slide 7 text

If you using Dependecy Injection Controller DI is not about container! čtvrtek, 25. července 13

Slide 8

Slide 8 text

If you using Dependecy Injection Controller DI is not about container! čtvrtek, 25. července 13

Slide 9

Slide 9 text

If you using Dependecy Injection Data Repository Controller DI is not about container! čtvrtek, 25. července 13

Slide 10

Slide 10 text

If you using Dependecy Injection Database Data Repository Controller DI is not about container! čtvrtek, 25. července 13

Slide 11

Slide 11 text

If you using Dependecy Injection Database Mamcache Data Repository Controller DI is not about container! čtvrtek, 25. července 13

Slide 12

Slide 12 text

If you using Dependecy Injection Database Mamcache Data Repository Controller DI is not about container! čtvrtek, 25. července 13

Slide 13

Slide 13 text

If you using Dependecy Injection Database Mamcache Data Repository Controller DI is not about container! čtvrtek, 25. července 13

Slide 14

Slide 14 text

DI example in PHP content  +=  max(0,  (float)$amount);   } } class  Oil  { } class  Engine  {   public  function  __construct(IGas  $gas,  Oil  $oil)  {} } čtvrtek, 25. července 13

Slide 15

Slide 15 text

Unit testing • Test single class • Test all methods • Needs some dependencies? Mock it! čtvrtek, 25. července 13

Slide 16

Slide 16 text

Unit testing • Test single class • Test all methods • Needs some dependencies? Mock it! • PHPUnit • Nette Tester • SimpleTest čtvrtek, 25. července 13

Slide 17

Slide 17 text

Mocking? • Class Engine needs IGas and Oil objects • Unit testing is about testing single class • Create mocks of IGas and Oil objects • Mock is dummy object which return defined values Original object Mock čtvrtek, 25. července 13

Slide 18

Slide 18 text

Mock example content  +=  max(0,  (float)$amount); if($this-­‐>content  >  100)  { throw  new  \Exception(“Overflow!); }   } } class  NaturalGasMock  extends  NaturalGas  implements  IGas  { pulic  fill($amount)  { return  true; } } čtvrtek, 25. července 13

Slide 19

Slide 19 text

Mocking frameworks • PHPUnit • Phake • Mockery • Mockista (by Jan Marek) čtvrtek, 25. července 13

Slide 20

Slide 20 text

Unit testing example multiplicationBy2(2); $this-­‐>assertEquals($result,  2); } } Using PHPUnit čtvrtek, 25. července 13

Slide 21

Slide 21 text

PHPUnit in PHPStorm • You can integrate your testing routine into PHPStorm • PHPStorm support testing with code coverage option čtvrtek, 25. července 13

Slide 22

Slide 22 text

• Write testable code • Write tests • Deliver code with better quality čtvrtek, 25. července 13

Slide 23

Slide 23 text

Questions? čtvrtek, 25. července 13

Slide 24

Slide 24 text

• Write some tests for your code • Next time tell us your experience • Next time we will learn how to write acceptance tests What next? čtvrtek, 25. července 13

Slide 25

Slide 25 text

Thank you for your attention! Please fill feedback form on http://bit.ly/feedback-code-testing čtvrtek, 25. července 13