定数を動的に定義するようなプログラムを一つのテストプロセスでやってしまうと、定数は上書きできないためうまくテストできない。
そんなときはテストを別プロセスにすることでテスタブルになる。
やり方は @runInSeparateProcess
アノテーションを別プロセスにしたいテストにつけるだけ。
<?php
class ConstantTest extends PHPUnit_Framework_TestCase
{
/**
* @runInSeparateProcess
*/
public function testConstant1()
{
define('THIS_IS_CONSTANT', 'foo');
$this->assertSame('foo', THIS_IS_CONSTANT);
}
/**
* @runInSeparateProcess
*/
public function testConstant2()
{
define('THIS_IS_CONSTANT', 'bar');
$this->assertSame('bar', THIS_IS_CONSTANT);
}
/**
* @runInSeparateProcess
*/
public function testConstant3()
{
define('THIS_IS_CONSTANT', 'baz');
$this->assertSame('baz', THIS_IS_CONSTANT);
}
}
実行結果
PHPUnit 3.6.3 by Sebastian Bergmann.
...
Time: 0 seconds, Memory: 4.75Mb
OK (3 tests, 3 assertions)