PHPUnit

1pt

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){
}

getMock

スタブもモックも getMock メソッドで作成する。getMockを使えば、対象クラスだけど中身のないハリボテクラスのオブジェクトを取得できる。

// これがgetMockメソッドだ!
protected function getMock($originalClassName, $methods = array(), 
  array $arguments = array(), $mockClassName = '', 
  $callOriginalConstructor = TRUE, $callOriginalClone = TRUE, 
  $callAutoload = TRUE)

スタブ

スタブとは、テスト対象ではない、テスト対象が依存しているオブジェクトのハリボテのこと。

$stub = $this->getMock('MyUserController');
$stub->expects($this->any())
     ->method('countAllUsers')
     ->will($this->returnValue(50));
$stub->countAllUsers(); // -> 50


な感じで値を好きに変更できる。

モック

モックとは、テスト対象オブジェクトのハリボテのこと。

$mock = $this->getMock('User');
$mock->expects($this->once())
     ->method('isLogin')
     ->with($this->equalTo(true))
$obj->call($mock); // call内でisLoginがtrueを返せばOK


expectsには PHPUnit_Framework_MockObject_Matcher_* を入れるためこれらのメソッドを
 any, never, atLeastOnce, once, exactly, at

withには PHPUnit_Framework_Constraint_* を入れる。
一覧 → http://www.phpunit.de/manual/3.4/ja/api.html#api.assert.asse...

参考
http://www.phpunit.de/manual/3.4/ja/test-doubles.html
http://www.martinfowler.com/articles/mocksArentStubs.html

「PHPUnit」について友人に書いてもらう。

あなたにとって「PHPUnit」とは?

ログインするとワンクリックでキーワードを投稿できます

ログインする 新規登録する

お気に入りの説明

0 pt
cake2.0からsimpleTestに代わってこちらが採用 8時間耐久PHPUnitの教室 PHPUnit でテスト駆動開発を始めよう Zend Fremework、Yii、他の数多くのプロジェクトまでもがPHPUnitを使ってい...
もっと読む

他の人の「PHPUnit」を見る