introduzione ai test automatici con phpunit

47
1,2,Test

Upload: fabio-giannese

Post on 13-Jul-2015

137 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Introduzione ai test automatici con PHPunit

1,2,Test

Page 2: Introduzione ai test automatici con PHPunit

Test Manuali

Page 3: Introduzione ai test automatici con PHPunit
Page 4: Introduzione ai test automatici con PHPunit
Page 5: Introduzione ai test automatici con PHPunit

TEST AUTOMATICI

Page 6: Introduzione ai test automatici con PHPunit
Page 7: Introduzione ai test automatici con PHPunit

Sebastian Bergman

Page 9: Introduzione ai test automatici con PHPunit

• PHPUNIT.Phar

• PEAR

• Composer

Installazione

http://phpunit.de/manual/3.7/en/installation.html

Page 10: Introduzione ai test automatici con PHPunit

http://getcomposer.org/

Page 11: Introduzione ai test automatici con PHPunit

...{ "require-dev": { ... "phpunit/phpunit": "3.7.*" }, ...

}...

./composer.json

Page 12: Introduzione ai test automatici con PHPunit
Page 13: Introduzione ai test automatici con PHPunit
Page 14: Introduzione ai test automatici con PHPunit

Configurazione

Page 15: Introduzione ai test automatici con PHPunit

./phpunit.xml

http://phpunit.de/manual/3.7/en/appendixes.configuration.html

<?xml version="1.0" encoding="UTF-8"?><phpunit colors="true"> <testsuites> <testsuite name="Application Test Suite"> <directory>./Acme/Tests</directory> </testsuite> </testsuites></phpunit>

Page 16: Introduzione ai test automatici con PHPunit

./phpunit.xml

http://phpunit.de/manual/3.7/en/appendixes.configuration.html

<?xml version="1.0" encoding="UTF-8"?><phpunit colors="true"> <testsuites> <testsuite name="Application Test Suite"> <directory>./Acme/Tests</directory>

<directory>./src/*/Tests</directory> </testsuite> </testsuites></phpunit>

Page 17: Introduzione ai test automatici con PHPunit

./phpunit.xml

http://phpunit.de/manual/3.7/en/appendixes.configuration.html

<?xml version="1.0" encoding="UTF-8"?><phpunit colors="true" bootstrap="./path/to/bootstrap.php"> <testsuites> <testsuite name="Application Test Suite"> <directory>./Acme/Tests</directory> </testsuite> </testsuites></phpunit>

Page 18: Introduzione ai test automatici con PHPunit

Assert*assertArrayHasKey()assertClassHasAttribute()assertClassHasStaticAttribute()assertContains()assertContainsOnly()assertContainsOnlyInstancesOf()assertCount()assertEmpty()assertEqualXMLStructure()assertEquals()assertFalse()assertFileEquals()assertFileExists()assertGreaterThan()assertGreaterThanOrEqual()assertInstanceOf()assertInternalType()assertJsonFileEqualsJsonFile()assertJsonStringEqualsJsonFile()assertJsonStringEqualsJsonString()

assertLessThan()assertLessThanOrEqual()assertNull()assertObjectHasAttribute()assertRegExp()assertStringMatchesFormat()assertStringMatchesFormatFile()assertSame()assertSelectCount()assertSelectEquals()assertSelectRegExp()assertStringEndsWith()assertStringEqualsFile()assertStringStartsWith()assertTag()assertThat()assertTrue()assertXmlFileEqualsXmlFile()assertXmlStringEqualsXmlFile()assertXmlStringEqualsXmlString()

Page 19: Introduzione ai test automatici con PHPunit

Assert*assertArrayHasKey()assertClassHasAttribute()assertClassHasStaticAttribute()assertContains()assertContainsOnly()assertContainsOnlyInstancesOf()assertCount()assertEmpty()assertEqualXMLStructure()assertEquals()assertFalse()assertFileEquals()assertFileExists()assertGreaterThan()assertGreaterThanOrEqual()assertInstanceOf()assertInternalType()assertJsonFileEqualsJsonFile()assertJsonStringEqualsJsonFile()assertJsonStringEqualsJsonString()

assertLessThan()assertLessThanOrEqual()assertNull()assertObjectHasAttribute()assertRegExp()assertStringMatchesFormat()assertStringMatchesFormatFile()assertSame()assertSelectCount()assertSelectEquals()assertSelectRegExp()assertStringEndsWith()assertStringEqualsFile()assertStringStartsWith()assertTag()assertThat()assertTrue()assertXmlFileEqualsXmlFile()assertXmlStringEqualsXmlFile()assertXmlStringEqualsXmlString()

Page 20: Introduzione ai test automatici con PHPunit

AssertTrue

<?phpclass TrueTest extends PHPUnit_Framework_TestCase{    public function testTrue()    {        $this->assertTrue(true);    }}?>

Page 21: Introduzione ai test automatici con PHPunit

AssertEquals

<?phpclass EqualsTest extends PHPUnit_Framework_TestCase{    public function testEquals()    {        $this->assertEquals('uguale', 'uguale');    }}?>

Page 22: Introduzione ai test automatici con PHPunit

AssertEquals

<?phpclass EqualsTest extends PHPUnit_Framework_TestCase{    public function testObjectsAreEqual()    {        $this->assertEquals(new stdClass,

new stdClass);    }}?>

Page 23: Introduzione ai test automatici con PHPunit

AssertCount

<?phpclass CountTest extends PHPUnit_Framework_TestCase{    public function testCount()    {        $this->assertCount(3,array(1,2,3));    }}?>

Page 24: Introduzione ai test automatici con PHPunit

AssertContains

<?phpclass ContainsTest extends PHPUnit_Framework_TestCase{    public function testContainsOK()    {        $this->assertContains('cerca', 

'chi cerca trova');    }}?>

Page 25: Introduzione ai test automatici con PHPunit

AssertContains

<?phpclass ContainsTest extends PHPUnit_Framework_TestCase{    public function testArrayContains()    {        $this->assertContains(‘ragno’,

array(‘ragno’,‘nel’,‘buco’));    }}?>

Page 26: Introduzione ai test automatici con PHPunit

ORGANIZZAZIONE

http://phpunit.de/manual/3.7/en/organizing-tests.html

Page 27: Introduzione ai test automatici con PHPunit

Tipologie

Page 28: Introduzione ai test automatici con PHPunit

UNIT

Page 29: Introduzione ai test automatici con PHPunit

Unit Test<?phpclass MyClass{    public function hello()    {        return ‘Ciao!’;    }}class MyClassTest extends PHPUnit_Framework_TestCase{    public function testHello()    {

$class = new MyClass();        $this->assertEquals(‘Ciao!’, $class->hello());    }}

Page 30: Introduzione ai test automatici con PHPunit

Integration

Page 31: Introduzione ai test automatici con PHPunit

Integration Test<?phpnamespace Acme\StoreBundle\Tests\Entity;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class ProductRepositoryFunctionalTest extends WebTestCase{

    private $em;

    public function setUp()    {        static::$kernel = static::createKernel();        static::$kernel->boot();        $this->em = static::$kernel->getContainer()            ->get('doctrine')            ->getManager()        ;    } ...

Page 32: Introduzione ai test automatici con PHPunit

Integration Test...

    public function testSearchByCategoryName()    {        $products = $this->em            ->getRepository('AcmeStoreBundle:Product')            ->searchByCategoryName('foo')        ;

        $this->assertCount(1, $products);    }

    protected function tearDown()    {        parent::tearDown();        $this->em->close();    }}

Page 33: Introduzione ai test automatici con PHPunit

Functional

Page 34: Introduzione ai test automatici con PHPunit

Functional Test<?phprequire_once 'PHPUnit/Extensions/SeleniumTestCase.php'; class WebTest extends PHPUnit_Extensions_SeleniumTestCase{    protected function setUp()    {        $this->setBrowser('*firefox');        $this->setBrowserUrl('http://php.net/');    }     public function testTitle()    {        $this->open('http://php.net/');        $this->assertTitle('PHP: Hypertext Preprocessor');    }}

Page 35: Introduzione ai test automatici con PHPunit

Functional Test<?php

namespace Acme\DemoBundle\Tests\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class DemoControllerTest extends WebTestCase{    public function testIndex()    {        $client = static::createClient();        $crawler = $client->request('GET', '/demo/hello/Fabio');        $this->assertGreaterThan(            0,            $crawler->filter('html:contains("Hello Fabio")')

->count() );    }}

Page 36: Introduzione ai test automatici con PHPunit

in azione

Page 37: Introduzione ai test automatici con PHPunit
Page 38: Introduzione ai test automatici con PHPunit

OUTPUT legenda

http://phpunit.de/manual/3.7/en/textui.html

.Eseguito con successoFIl test è fallitoEErrore nell’esecuzioneSSaltato (Skipped)INon completo

Page 39: Introduzione ai test automatici con PHPunit
Page 40: Introduzione ai test automatici con PHPunit
Page 41: Introduzione ai test automatici con PHPunit

comandi utili

http://phpunit.de/manual/current/en/textui.html

--verboseMostra più informazioni, come il nome dei test saltati o incompleti

--debugMostra più informazioni, come il nome del test in esecuzione

--stop-on-errorBlocca il processo al primo errore

--stop-on-failureBlocca il processo al primo fallimento di un test

--filter [nome]Processa solo i test che contengono nel nome il termine passato

Page 42: Introduzione ai test automatici con PHPunit

Test-Driven Development

Page 43: Introduzione ai test automatici con PHPunit

VANTAGGI

• Affidabile

• StabilE

• LeggibilE

• Cooperativo

• Sviluppo rapido

Page 44: Introduzione ai test automatici con PHPunit

?

Page 45: Introduzione ai test automatici con PHPunit
Page 46: Introduzione ai test automatici con PHPunit

{ ... "require-dev": {

... "whatthejeff/nyancat-phpunit-resultprinter": "~1.1" }

...}

composer.json

phpunit.xml<phpunit ...

printerFile="vendor/whatthejeff/nyancat-phpunit-resultprinter/src/NyanCat/PHPUnit/ResultPrinter.php"printerClass="NyanCat\PHPunit\ResultPrinter">...

https://github.com/whatthejeff/nyancat-phpunit-resultprinter

Page 47: Introduzione ai test automatici con PHPunit