+ All Categories
Home > Documents > Testování v PHP

Testování v PHP

Date post: 17-May-2015
Category:
Upload: ondrej-mirtes
View: 943 times
Download: 3 times
Share this document with a friend
Description:
Úvod do testování aplikací v PHP.
27
Testování v PHP Ondřej Mirtes [email protected]
Transcript
Page 1: Testování v PHP

Testování v PHPOndřej [email protected]

Page 2: Testování v PHP

Proč psát testy?

• Nedílná součást vývoje• Stálost• Rychle odhalí chyby• Refaktoring

Page 3: Testování v PHP

„Testy někdy dopíšu.“

Page 4: Testování v PHP

100% code coverage?

Page 5: Testování v PHP

Dobrý návrh aplikace

• Opravdové objekty (OOP)• Minimum statických metod a proměnných• Dependency Injection

Page 6: Testování v PHP

Dependency Injection

public function __construct(){ $this->db = DbConnection::getInstance();}

Page 7: Testování v PHP

Dependency Injection

public function __construct(IDbConnection $db){ $this->db = $db;}

Page 8: Testování v PHP

PHPUnit

Page 9: Testování v PHP

Instalace

$ sudo pear channel-discover pear.phpunit.de$ sudo pear install phpunit/PHPUnit$ phpunit –-versionPHPUnit 3.5.2 by Sebastian Bergmann.

Page 10: Testování v PHP

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

Page 11: Testování v PHP

phpunit.xml

<phpunitbootstrap="bootstrap.php"colors="true"backupGlobals="false"

/>

/myapp/tests/phpunit.xml

Page 12: Testování v PHP

TestCase

abstract class TestCase extends PHPUnit_Framework_TestCase{

}

/myapp/tests/TestCase.php

Page 13: Testování v PHP

První test

class StackTest extends TestCase{

public function testInitialStackIsEmpty() { $stack = new Stack; $this->assertEquals(0, count($stack->items)); }

}

/myapp/tests/Stack/StackTest.php

Page 14: Testování v PHP

Implementace

class Stack{

private $items = array();

public function getItems() { return $this->items; }

}

/myapp/Stack/Stack.php

Page 15: Testování v PHP

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/

Page 16: Testování v PHP

Spuštění testů

$ phpunit –-testdox .

StackTest [x] Initial stack is empty

/myapp/tests/

Page 17: Testování v PHP

Vložení prvku

public function testPushedItemIsInTheStack(){ $stack = new Stack; $stack->push(5); $this->assertContains(5, $stack->getItems());}

/myapp/tests/Stack/StackTest.php

Page 18: Testování v PHP

Vložení prvku

$ phpunit –-testdox .

StackTest [x] Initial stack is empty [ ] Pushed item is in the stack

/myapp/tests/

Page 19: Testování v PHP

Vložení prvku

public function push($item){ $this->items[] = $item;}

/myapp/Stack/Stack.php

Page 20: Testování v PHP

Vložení prvku

$ phpunit –-testdox .

StackTest [x] Initial stack is empty [x] Pushed item is in the stack

/myapp/tests/

Page 21: Testování v PHP

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

Page 22: Testování v PHP

Podtečení zásobníku

/** * @expectedException StackUnderflowException */public function testStackCannotBeUnderflowed(){ $stack = new Stack; $stack->pop();}

/myapp/tests/Stack/StackTest.php

Page 23: Testování v PHP

Další asserty

• assertNull• assertSame• assertGreaterThan• assertType• assertInstanceOf• assertRegexp• assertThat

Page 24: Testování v PHP

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()); }

}

Page 25: Testování v PHP

Další vlastnosti

• markTestSkipped()• getMock()• --coverage-html• Propojení s Continuous Integration

Page 26: Testování v PHP

Otázky?

Page 27: Testování v PHP

Díky za pozornost!


Recommended