TimeWrapper
組み込みのPHP関数を呼び出すことを確認することが目的の場合は、 runkit拡張機能time
を使用する必要があります。これにより、組み込み関数を、呼び出しを記録する独自のバージョンに置き換えることができます。内部関数の名前を変更できるようにするには、の設定を有効にする必要があります。runkit.internal_override
php.ini
class TimeWrapperTest extends PHPUnit_Framework_TestCase {
static $calledTime;
function setUp() {
self::$calledTime = false;
}
function testTimeGetsCalled() {
$fixture = new TimeWrapper;
try {
runkit_function_rename('time', 'old_time');
runkit_function_rename('new_time', 'time');
$time = $fixture->time();
self::assertTrue('Called time()', $calledTime);
}
catch (Exception $e) {
// PHP lacks finally, but must make sure to revert time() for other test
}
runkit_function_rename('time', 'new_time');
runkit_function_rename('old_time', 'time');
if ($e) throw $e;
}
}
function new_time() {
TimeWrapperTest::$calledTime = true;
return old_time();
}
拡張機能を使用できない場合、またはそのようなトリックを避けたい場合はTimeWrapper
、実行時に呼び出される関数をオーバーライドできるように変更できます。
class TimeWrapper {
private $function;
public function __construct($function = 'time') {
$this->function = $function;
}
public function time() {
return call_user_func($this->function);
}
}
コンストラクターを呼び出したり、コンストラクターrunkit_function_rename
に渡したりせずに、上記のテストケースを使用します。ここでの欠点は、への呼び出しごとに本番環境で(おそらくわずかな)パフォーマンスペナルティを支払うことです。new_time
TimeWrapper
TimeWrapper::time