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