S eda1a14b50ee24bcab19b62f40858e76 PHPUnit

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

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

2.3のマニュアル
http://www.m-takagi.org/docs/php/pocket_gu...

インストール

$ 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/writin...#writing-tests-for-phpunit.exceptions.examples.ExceptionTest.php

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


コードカバレッジ

http://www.phpunit.de/manual/3.4/ja/code-c...
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.assertThat.tables.constraints

参考
http://www.phpunit.de/manual/3.4/ja/test-d...
http://www.martinfowler.com/articles/mocks...

もしかして

    他の人の「PHPUnit」

    S eda1a14b50ee24bcab19b62f40858e76

    無所属ソフトウェアエンジニア

    (1722words)

    最新

      最新エントリ