PHPUnitの履歴

PHPUnit2の頃はスケルトンが汚かったり、パスの指定がめどくさかったりで、こ使うなら自作した方がいいわー、と自分で作ってたけど、PHPUnit3はすっごい使いやすくなってた!Zendも使ってるし僕も使います。

PHPUnit3 マニュアル
http://www.phpunit.de/manual/3.3/ja/index.html
解説
http://php.nice-777.com/PHPUnit/index.html

2.3のマニュアル
http://www.m-takagi.org/docs/php/pocket_guide/2.3/ja/index.h...

インストール

$ pear channel-discover pear.phpunit.de
$ pear install phpunit/PHPUnit

Class %s could not be found in %s.

TestCaseのサブクラス使ってると出るときがある。
これはTestCaseクラスの自動判別にサブクラスをロードしようとしているから。→PHPUnit_Runner_StandardTestSuiteLoader::load

$ phpunit HogeTest path/to/HogeTest.php

このようにクラス名とファイル名を指定すればOK。

例外のテスト

http://www.phpunit.de/manual/3.3/ja/writing-tests-for-phpuni...

expectedExceptionアノテーションを使う。

<?php
require_once 'PHPUnit/Framework.php';
 
class ExceptionTest extends PHPUnit_Framework_TestCase
{
    /**
     * @expectedException InvalidArgumentException
     */
    public function testException()
    {
    }
}
?>

コードカバレッジ

http://www.phpunit.de/manual/3.4/ja/code-coverage-analysis.h...

phpunit --coverage-html ./report BankAccountTest


@coversアノテーションでカバーするメソッドなどを限定できる

@codeCoverageIgnoreStart から @codeCoverageIgnoreEndまでは無視できる

assert

/**
 * @assert (0, 0) == 0
 */
function add($a, $b){
}