2013年3月4日月曜日

PHPUnitを使ってユニットテスト


PHPUnitを使ってユニットテスト


環境

Xubuntu 12.10
PHP 5.3.10
PHPUnit 3.7.15

やったこと


PHP5をインストール
$ sudo apt-get install php5 php5-common php5-mysql php5-dev php5-cli php5-gd php5-curl php5-mcrypt

PEAR を インストール
$ sudo apt-get install php-pear

PEAR を 最新版にアップグレード
$ sudo pear upgrade pear

PHPUnit を インストール
$ sudo pear channel-discover pear.phpunit.de
$ sudo pear channel-discover components.ez.no
$ sudo pear channel-discover pear.symfony.com
$ sudo pear install --alldeps phpunit/PHPUnit

PHPUnit 3.7 から現行コマンドが廃止されるから、phpunit/PHPUnit_SkeletonGenerator をインストールしろとの事
$ sudo pear install phpunit/PHPUnit_SkeletonGenerator

PHP と PHPUnit の バージョンを確認
$ php -version
PHP 5.3.10-1ubuntu3.5 with Suhosin-Patch (cli) (built: Jan 18 2013 23:40:19) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

$ phpunit --version
PHPUnit 3.7.15 by Sebastian Bergmann.





とってもカンタンなPHPUnitサンプル1


simpleTest.php

<?

class simpleTest extends PHPUnit_Framework_TestCase
{

    public function test_same()
    {
        $result = 3;
        $this->assertSame(3, $result);
    }

    public function test_equal()
    {
        $result = 4;
        $this->assertEquals(4, $result);
    }

    public function test_true()
    {
        $result = 5;
        $this->assertTrue(5==$result);
    }

    public function test_false()
    {
        $result = 6;
        $this->assertFalse(7 == $result);
    }

}

?>

PHPUnitサンプル1 実行結果
$ phpunit simpleTest.php 
PHPUnit 3.7.14 by Sebastian Bergmann.

....

Time: 0 seconds, Memory: 2.25Mb

OK (4 tests, 4 assertions)


とってもカンタンなPHPUnitサンプル2


hellp.php

<?php

class Message
{
    public function say()
    {
        return "Hello";
    }
}
?>


test.php
<?php

//hello.phpを読み込む
require 'hello.php';

class MessageTest extends PHPUnit_Framework_TestCase
{
    protected function setUp()
    {
        // step1 準備
        //Messageクラスをobjectという名前でインスタンス化する
        //インスタンス名はobjecotではなく、stringでも、textでも、fooでも、hogeでもよかったのだけど、何となくobjectにした
        $this->object = new Message;
    }

    public function test_Message_sayMethod_isHello()
    {
        // step2 メソッドや関数の実行
        //$resultにobjectインスタンスのsayメソッドが返す値を格納
        $result = $this->object->say();

        // step3 メッソドや関数の実行結果の検証
        //"Hello"と$resultが等しいか調べる
        $this->assertEquals("Hello", $result);
    }


}
#テストが成功したらMessageクラスをインスタンス化したobjectのメソッドsayが返す値が、"Hello"と等しいとassertされたことになる
?>

PHPUnitサンプル2 実行結果
$ phpunit test.php 
PHPUnit 3.7.14 by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 2.25Mb

OK (1 test, 1 assertion)

注意

テストするクラス名の末尾に "Test" という文字列を付与したものがテストケース名となるようクラス名を定義する
検証メソッドの名前は、長くても説明的で明確な名前にする
1つの検証メソッドの中では、1つのアサーションだけにする
検証メソッド名の最初に "test" を付けないとテスト対象にならない。

参考


Installing PHPUnit On Ubuntu 11.04 (Natty Narwhal)
http://www.giocc.com/installing-phpunit-on-ubuntu-11-04-natty-narwhal.html

PHP5.2環境にPHPUnitをインストールする手順
http://nob-log.info/2012/11/02/php52-install-phpunit/

PHPUnit 3.7 japanese
http://www.phpunit.de/manual/3.7/ja/index.html

0 コメント: