March 8, 2014

PHPUnitでprotectedなメソッドをテストするメモ

以前 "ReflectionClassでpublicではないプロパティやメソッドにアクセスするメモ" という記事を書いたんですが、PHPUnitでの使い方をメモしておきます。
<?php

require_once('vendor/autoload.php');

class Example
{
    protected function protectedMethod($value)
    {
        return $value;
    }
}

class ExampleTest extends PHPUnit_Framework_TestCase
{
    protected function getMethod($object, $methodName)
    {
        $reflection = new ReflectionClass($object);
        $method = $reflection->getMethod($methodName);
        $method->setAccessible(true);

        return $method;
    }

    public function testProtectedMethod()
    {
        $example = new Example;
        $method = $this->getMethod($example, 'protectedMethod');

        $this->assertTrue($method->invokeArgs($example, ['xxx']) === 'xxx');
    }
}
$ phpunit ExampleTest.php
PHPUnit 4.0.3 by Sebastian Bergmann.

.

Time: 38 ms, Memory: 4.75Mb

OK (1 test, 1 assertion)
実際には、上記のExampleTest#getMethod()は、各テストケースの基底クラスに書く感じになるはずです。

No comments:

Post a Comment