Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Testování v PHP

Testování v PHP

Ondřej Mirtes

December 02, 2010
Tweet

More Decks by Ondřej Mirtes

Other Decks in Technology

Transcript

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

    Stálost   •  Rychle  odhalí  chyby   •  Refaktoring  
  2. Dobrý  návrh  aplikace   •  Opravdové  objekty  (OOP)   • 

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

     $this-­‐>db  =  DbConnection::getInstance();   }  
  4. Instalace   $  sudo  pear  channel-­‐discover  pear.phpunit.de   $  sudo

     pear  install  phpunit/PHPUnit   $  phpunit  –-­‐version   PHPUnit  3.5.2  by  Sebastian  Bergmann.  
  5. 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  
  6. První  test   class  StackTest  extends  TestCase   {  

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

     $items  =  array();        public  function  getItems()      {          return  $this-­‐>items;      }     }     /myapp/Stack/Stack.php  
  8. 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/  
  9. Spuštění  testů   $  phpunit  –-­‐testdox  .     StackTest

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

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

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

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

       [x]  Initial  stack  is  empty    [x]  Pushed  item  is  in  the  stack   /myapp/tests/  
  14. 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  
  15. Podtečení  zásobníku   /**    *  @expectedException  StackUnderflowException    */

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

    assertGreaterThan   •  assertType   •  assertInstanceOf   •  assertRegexp   •  assertThat  
  17. 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());      }     }  
  18. Další  vlastnosti   •  markTestSkipped()   •  getMock()   • 

    -­‐-­‐coverage-­‐html   •  Propojení  s  ConHnuous  IntegraHon