Uploaded on

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

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

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
878
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
2
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

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% codecoverage?
  • 5. Dobrý návrh aplikace
    Opravdové objekty (OOP)
    Minimum statických metod a proměnných
    DependencyInjection
  • 6. DependencyInjection
    public function__construct()
    {
    $this->db = DbConnection::getInstance();
    }
  • 7. DependencyInjection
    public function__construct(IDbConnection $db)
    {
    $this->db = $db;
    }
  • 8. PHPUnit
  • 9. Instalace
    $ sudopearchannel-discover pear.phpunit.de
    $ sudopearinstallphpunit/PHPUnit
    $ phpunit –-version
    PHPUnit3.5.2by Sebastian Bergmann.
  • 10. Bootstrap
    /myapp/tests/bootstrap.php
    /** 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í... */
  • 11. phpunit.xml
    /myapp/tests/phpunit.xml
    <phpunit
    bootstrap="bootstrap.php"
    colors="true"
    backupGlobals="false"
    />
  • 12. TestCase
    /myapp/tests/TestCase.php
    abstractclassTestCase
    extendsPHPUnit_Framework_TestCase
    {
    }
  • 13. První test
    /myapp/tests/Stack/StackTest.php
    classStackTestextendsTestCase
    {
    public functiontestInitialStackIsEmpty()
    {
    $stack= newStack;
    $this->assertEquals(0, count($stack->items));
    }
    }
  • 14. Implementace
    /myapp/Stack/Stack.php
    classStack
    {
    private$items = array();
    public functiongetItems()
    {
    return$this->items;
    }
    }
  • 15. Spuštění testů
    /myapp/tests/
    $ phpunit .
    PHPUnit 3.5.2 by Sebastian Bergmann.
    .
    Time: 0 seconds, Memory: 4.00Mb
    OK (1 test, 1 assertion)
  • 16. Spuštění testů
    /myapp/tests/
    $ phpunit –-testdox .
    StackTest
    [x] Initialstackisempty
  • 17. Vložení prvku
    /myapp/tests/Stack/StackTest.php
    public functiontestPushedItemIsInTheStack()
    {
    $stack= newStack;
    $stack->push(5);
    $this->assertContains(5, $stack->getItems());
    }
  • 18. Vložení prvku
    /myapp/tests/
    $ phpunit –-testdox .
    StackTest
    [x] Initialstackisempty
    [ ] Pusheditemis in thestack
  • 19. Vložení prvku
    /myapp/Stack/Stack.php
    public functionpush($item)
    {
    $this->items[] = $item;
    }
  • 20. Vložení prvku
    /myapp/tests/
    $ phpunit –-testdox .
    StackTest
    [x] Initialstackisempty
    [x] Pusheditemis in thestack
  • 21. Výběr prvku
    /myapp/tests/Stack/StackTest.php
    public functiontestPoppedItemIsReturned()
    {
    $stack= newStack;
    $stack->push(5);
    $this->assertEquals(5, $stack->pop());
    $this->assertNotContains(5, $stack->getItems());
    }
  • 22. Podtečení zásobníku
    /myapp/tests/Stack/StackTest.php
    /**
    * @expectedExceptionStackUnderflowException
    */
    public functiontestStackCannotBeUnderflowed()
    {
    $stack= newStack;
    $stack->pop();
    }
  • 23. Další asserty
    assertNull
    assertSame
    assertGreaterThan
    assertType
    assertInstanceOf
    assertRegexp
    assertThat
  • 24. setUp() & tearDown()
    classStackTestextendsTestCase
    {
    private$stack;
    protectedfunctionsetUp()
    {
    $this->stack = newStack;
    }
    public functiontestInitialStackIsEmpty()
    {
    $this->assertEquals(0, count($this->stack->getItems()));
    }
    public functiontestPushedItemIsInTheStack()
    {
    $this->stack->push(5);
    $this->assertContains(5, $this->stack->getItems());
    }
    }
  • 25. Další vlastnosti
    markTestSkipped()
    getMock()
    --coverage-html
    Propojení s ContinuousIntegration
  • 26. Otázky?
  • 27. Díky za pozornost!