Testování v PHP

Testování v PHP

95a298d2bffa1b46fd023a286a8a7e86?s=128

Ondřej Mirtes

December 02, 2010
Tweet

Transcript

  1. Testování  v  PHP   Ondřej  Mirtes ondrej@mirtes.cz  

  2. Proč  psát  testy?   •  Nedílná  součást  vývoje   • 

    Stálost   •  Rychle  odhalí  chyby   •  Refaktoring  
  3. „Testy  někdy  dopíšu.“  

  4. 100%  code  coverage?  

  5. Dobrý  návrh  aplikace   •  Opravdové  objekty  (OOP)   • 

    Minimum  staHckých  metod  a  proměnných   •  Dependency  InjecHon  
  6. Dependency  Injection   public  function  __construct()   {    

     $this-­‐>db  =  DbConnection::getInstance();   }  
  7. Dependency  Injection   public  function  __construct(IDbConnection  $db)   {  

       $this-­‐>db  =  $db;   }  
  8. PHPUnit  

  9. Instalace   $  sudo  pear  channel-­‐discover  pear.phpunit.de   $  sudo

     pear  install  phpunit/PHPUnit   $  phpunit  –-­‐version   PHPUnit  3.5.2  by  Sebastian  Bergmann.  
  10. Bootstrap   /**  načtení  oblíbeného  frameworku  */   require_once(__DIR__  .

     '/../libs/Nette/loader.php');     /**  abstraktní  třída  jednotlivých  testů  */   require_once(__DIR__  .  '/TestCase.php');       /**  další  nastavení...  */   /myapp/tests/bootstrap.php  
  11. phpunit.xml   <phpunit    bootstrap="bootstrap.php"    colors="true"    backupGlobals="false"  

    />   /myapp/tests/phpunit.xml  
  12. TestCase   abstract  class  TestCase      extends  PHPUnit_Framework_TestCase  

    {     }     /myapp/tests/TestCase.php  
  13. První  test   class  StackTest  extends  TestCase   {  

         public  function  testInitialStackIsEmpty()      {          $stack  =  new  Stack;          $this-­‐>assertEquals(0,  count($stack-­‐>items));      }     }     /myapp/tests/Stack/StackTest.php  
  14. Implementace   class  Stack   {        private

     $items  =  array();        public  function  getItems()      {          return  $this-­‐>items;      }     }     /myapp/Stack/Stack.php  
  15. Spuštění  testů   $  phpunit  .   PHPUnit  3.5.2  by

     Sebastian  Bergmann.     .     Time:  0  seconds,  Memory:  4.00Mb     OK  (1  test,  1  assertion)   /myapp/tests/  
  16. Spuštění  testů   $  phpunit  –-­‐testdox  .     StackTest

       [x]  Initial  stack  is  empty   /myapp/tests/  
  17. Vložení  prvku   public  function  testPushedItemIsInTheStack()   {    

     $stack  =  new  Stack;      $stack-­‐>push(5);      $this-­‐>assertContains(5,  $stack-­‐>getItems());   }   /myapp/tests/Stack/StackTest.php  
  18. Vložení  prvku   $  phpunit  –-­‐testdox  .     StackTest

       [x]  Initial  stack  is  empty    [  ]  Pushed  item  is  in  the  stack   /myapp/tests/  
  19. Vložení  prvku   public  function  push($item)   {    

     $this-­‐>items[]  =  $item;   }         /myapp/Stack/Stack.php  
  20. Vložení  prvku   $  phpunit  –-­‐testdox  .     StackTest

       [x]  Initial  stack  is  empty    [x]  Pushed  item  is  in  the  stack   /myapp/tests/  
  21. Výběr  prvku   public  function  testPoppedItemIsReturned()   {    

     $stack  =  new  Stack;      $stack-­‐>push(5);      $this-­‐>assertEquals(5,  $stack-­‐>pop());      $this-­‐>assertNotContains(5,  $stack-­‐>getItems());   }   /myapp/tests/Stack/StackTest.php  
  22. Podtečení  zásobníku   /**    *  @expectedException  StackUnderflowException    */

      public  function  testStackCannotBeUnderflowed()   {      $stack  =  new  Stack;      $stack-­‐>pop();   }     /myapp/tests/Stack/StackTest.php  
  23. Další  asserty   •  assertNull   •  assertSame   • 

    assertGreaterThan   •  assertType   •  assertInstanceOf   •  assertRegexp   •  assertThat  
  24. setUp()  &  tearDown()   class  StackTest  extends  TestCase   {

           private  $stack;        protected  function  setUp()      {          $this-­‐>stack  =  new  Stack;      }        public  function  testInitialStackIsEmpty()      {          $this-­‐>assertEquals(0,  count($this-­‐>stack-­‐>getItems()));      }        public  function  testPushedItemIsInTheStack()      {          $this-­‐>stack-­‐>push(5);                  $this-­‐>assertContains(5,  $this-­‐>stack-­‐>getItems());      }     }  
  25. Další  vlastnosti   •  markTestSkipped()   •  getMock()   • 

    -­‐-­‐coverage-­‐html   •  Propojení  s  ConHnuous  IntegraHon  
  26. Otázky?  

  27. Díky  za  pozornost!