以前 "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