Test-Driven Design and Unit Testing with phpUnit

Jussi Pohjolainen

Tampere University of Applied Sciences » Computer Science

Test-Driven Design

Testing

Unit Testing

PHPUnit

Writing a test units

Example class

class Calculator
{
    public function sum ($a, $b)
    {
        if( ( is_int($a)    and  is_int($b) )      or
            ( is_float($a)  and  is_float($b) ) )
        {
            return $a + $b;
        }
        else 
        {
            return false;
        }
    }
}

Test class


   class CalculatorTest extends PHPUnit_Framework_TestCase 
    {
        public function __construct ($name) 
        {
            parent::__construct($name);
        }

        function testSum () 
        {
            $calculator = new Calculator();
            $this->assertTrue( $calculator->sum(5, 5)       == 10 ) ;
            $this->assertTrue( $calculator->sum("5", 5)     == false );
            $this->assertTrue( $calculator->sum("moi", "t") == false );
            $this->assertTrue( $calculator->sum(5.5, 5.5)   == 11.0 )
            $this->assertTrue( $calculator->sum(5.5, 5)     == 11.5 );

        }
    }

Running the Test class

Writing inline and out-of-line unit tests

Example of a inline-test

class Calculator { ... }

if(realpath($_SERVER['PHP_SELF']) == __FILE__) 
{
    require_once("PHPUnit/Framework/TestSuite.php");
    require_once("PHPUnit/TextUI/TestRunner.php");

    class CalculatorTest extends PHPUnit_Framework_TestCase 
    {
        ...
    }
    $suite = new PHPUnit_Framework_TestSuite();
    $suite->addTest(new CalculatorTest('testSum'));
    PHPUnit_TextUI_TestRunner::run($suite);
 }

Whole example: calculator.php

Running multiple tests

Example of Outline-test

Creating better error messages

Assert

Repetitive tests