Testování v PHP

1,051 views
1,000 views

Published on

Úvod do testování aplikací v PHP.

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,051
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Testování v PHP

  1. 1. Testování v PHP<br />Ondřej Mirtes<br />ondrej@mirtes.cz<br />
  2. 2. Proč psát testy?<br />Nedílná součást vývoje<br />Stálost<br />Rychle odhalí chyby<br />Refaktoring<br />
  3. 3. „Testy někdy dopíšu.“<br />
  4. 4. 100% codecoverage?<br />
  5. 5. Dobrý návrh aplikace<br />Opravdové objekty (OOP)<br />Minimum statických metod a proměnných<br />DependencyInjection<br />
  6. 6. DependencyInjection<br />public function__construct()<br />{<br />$this->db = DbConnection::getInstance();<br />}<br />
  7. 7. DependencyInjection<br />public function__construct(IDbConnection $db)<br />{<br />$this->db = $db;<br />}<br />
  8. 8. PHPUnit<br />
  9. 9. Instalace<br />$ sudopearchannel-discover pear.phpunit.de<br />$ sudopearinstallphpunit/PHPUnit<br />$ phpunit –-version<br />PHPUnit3.5.2by Sebastian Bergmann.<br />
  10. 10. Bootstrap<br />/myapp/tests/bootstrap.php<br />/** načtení oblíbeného frameworku */<br />require_once(__DIR__. '/../libs/Nette/loader.php');<br />/** abstraktní třída jednotlivých testů */<br />require_once(__DIR__ . '/TestCase.php');<br />/** další nastavení... */<br />
  11. 11. phpunit.xml<br />/myapp/tests/phpunit.xml<br /><phpunit<br />bootstrap="bootstrap.php"<br />colors="true"<br />backupGlobals="false"<br />/><br />
  12. 12. TestCase<br />/myapp/tests/TestCase.php<br />abstractclassTestCase<br />extendsPHPUnit_Framework_TestCase<br />{<br />}<br />
  13. 13. První test<br />/myapp/tests/Stack/StackTest.php<br />classStackTestextendsTestCase<br />{<br />public functiontestInitialStackIsEmpty()<br /> {<br />$stack= newStack;<br />$this->assertEquals(0, count($stack->items));<br /> }<br />}<br />
  14. 14. Implementace<br />/myapp/Stack/Stack.php<br />classStack<br />{<br />private$items = array();<br />public functiongetItems()<br /> {<br />return$this->items;<br /> }<br />}<br />
  15. 15. Spuštění testů<br />/myapp/tests/<br />$ phpunit .<br />PHPUnit 3.5.2 by Sebastian Bergmann.<br />.<br />Time: 0 seconds, Memory: 4.00Mb<br />OK (1 test, 1 assertion)<br />
  16. 16. Spuštění testů<br />/myapp/tests/<br />$ phpunit –-testdox .<br />StackTest<br /> [x] Initialstackisempty<br />
  17. 17. Vložení prvku<br />/myapp/tests/Stack/StackTest.php<br />public functiontestPushedItemIsInTheStack()<br />{<br />$stack= newStack;<br />$stack->push(5);<br />$this->assertContains(5, $stack->getItems());<br />}<br />
  18. 18. Vložení prvku<br />/myapp/tests/<br />$ phpunit –-testdox .<br />StackTest<br /> [x] Initialstackisempty<br /> [ ] Pusheditemis in thestack<br />
  19. 19. Vložení prvku<br />/myapp/Stack/Stack.php<br />public functionpush($item)<br />{<br />$this->items[] = $item;<br />}<br />
  20. 20. Vložení prvku<br />/myapp/tests/<br />$ phpunit –-testdox .<br />StackTest<br /> [x] Initialstackisempty<br /> [x] Pusheditemis in thestack<br />
  21. 21. Výběr prvku<br />/myapp/tests/Stack/StackTest.php<br />public functiontestPoppedItemIsReturned()<br />{<br />$stack= newStack;<br />$stack->push(5);<br />$this->assertEquals(5, $stack->pop());<br />$this->assertNotContains(5, $stack->getItems());<br />}<br />
  22. 22. Podtečení zásobníku<br />/myapp/tests/Stack/StackTest.php<br />/**<br /> * @expectedExceptionStackUnderflowException<br /> */<br />public functiontestStackCannotBeUnderflowed()<br />{<br />$stack= newStack;<br />$stack->pop();<br />}<br />
  23. 23. Další asserty<br />assertNull<br />assertSame<br />assertGreaterThan<br />assertType<br />assertInstanceOf<br />assertRegexp<br />assertThat<br />
  24. 24. setUp() & tearDown()<br />classStackTestextendsTestCase<br />{<br />private$stack;<br />protectedfunctionsetUp()<br /> {<br />$this->stack = newStack;<br />}<br />public functiontestInitialStackIsEmpty()<br /> {<br /> $this->assertEquals(0, count($this->stack->getItems()));<br /> }<br /> public functiontestPushedItemIsInTheStack()<br /> {<br /> $this->stack->push(5); <br />$this->assertContains(5, $this->stack->getItems());<br /> }<br />}<br />
  25. 25. Další vlastnosti<br />markTestSkipped()<br />getMock()<br />--coverage-html<br />Propojení s ContinuousIntegration<br />
  26. 26. Otázky?<br />
  27. 27. Díky za pozornost!<br />

×