somemo programming etc.

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【php】privateメソッドのテストをする

PHPUnitでprivateメソッドをする方法のメモ。
これを実現するには、phpのリフレクションを使用します。

参考:
 PHPでリフレクション
 上記に含まれるWiki(リフレクション (情報工学)を参照

ソースコード
<?php
require_once 'src/Stack.php';

class StackTest extends PHPUnit_Framework_TestCase {
    public function testPrivateFunc() {
        $reflectMethod = new ReflectionMethod('Stack', 'privateFunc');
        //$reflectMethod->setAccessible(true);

        $this->assertTrue($reflectMethod->invoke(new Stack()));
    }
}
<?php
class Stack {
    private function privateFunc() {
        return true;
    }
}

コメントアウト時に発生する例外
リフレクションメソッドを使用する際に、privateメソッドを実行すると発生します。
ReflectionException: Trying to invoke private method Stack::privateFunc() from scope ReflectionMethod

setAccessibleを実行すると、privateやprotectedなメソッドを実行できるようになります。

以上。