テスト対象コード
SampleClass.php
<?php
class SampleClass
{
protected $foo = TRUE;
protected function hoge()
{
return TRUE;
}
}
- hoge()がTRUEを返すことを検証したい
- $fooがTRUEであることを検証したい
テストコード
SampleClassTest.php
<?php
require_once 'SampleClass.php';
class SampleClassTest extends PHPUnit_Framework_TestCase
{
public function testAccessProtectedProperty()
{
$foo = self::getProperty('foo');
$obj = new SampleClass();
$this->assertTrue($foo->getValue($obj));
}
public function testAccessProtectedMethod()
{
$foo = self::getMethod('hoge');
$obj = new SampleClass();
$this->assertTrue($foo->invokeArgs($obj, array()));
}
protected static function getProperty($name)
{
$class = new ReflectionClass('SampleClass');
$property = $class->getProperty($name);
$property->setAccessible(true);
return $property;
}
protected static function getMethod($name)
{
$class = new ReflectionClass('SampleClass');
$method = $class->getMethod($name);
$method->setAccessible(true);
return $method;
}
}
テスト実行結果
$ phpunit SampleClassTest.php
PHPUnit 3.6.10 by Sebastian Bergmann.
..
Time: 0 seconds, Memory: 2.50Mb
OK (2 tests, 2 assertions)
- ReflectionClassを活用することで検証結果を得ることができた