PHPUnitでdefine値に依存するテストを書かなければいけなかったのですが
単体で実行すると成功するが、まとめて実行すると先に実行されたテストのdefineに依存してしまい
テストが失敗するという問題に悩まされましたが解決出来ました
実行したいテスト
~~~
define(‘FOO’, 0);
class ATest extends PHPUnit_Framework_TestCase
{
/**
* @test
*/
public function 定数が正しく設定されているかのテスト()
{
$this->assertEquals(0, constant(‘FOO’));
}
}
~~~
~~~
define(‘FOO’, 1);
class BTest extends PHPUnit_Framework_TestCase
{
/**
* @test
*/
public function 定数が正しく設定されているかのテスト()
{
$this->assertEquals(1, constant(‘FOO’));
}
}
~~~
個別に実行した場合
テストはうまくいきます
~~~
phpunit -v tests/ATest.php
PHPUnit 3.6.10 by Sebastian Bergmann.
.
Time: 1 second, Memory: 8.75Mb
OK (1 tests, 1 assertions)
~~~
まとめて実行した場合
defineATestに依存してしまいBTestが失敗します
~~~
phpunit -v tests/
PHPUnit 3.6.10 by Sebastian Bergmann.
.F
Time: 1 second, Memory: 8.75Mb
There were 1 failures:
1) BTest::定数が正しく設定されているかのテスト
Failed asserting that 1 matches expected 0.
FAILURES!
Tests: 2, Assertions: 2, Failures: 1.
~~~
こんな時は
@runInSeparateProcess
@preserveGlobalState disabled
BTestを修正
ドキュメンテーションブロックに
@runInSeparateProcessと
@preserveGlobalState disabledを追記する
~~~
define(‘FOO’, 1);
class BTest extends PHPUnit_Framework_TestCase
{
/**
* @test
* @runInSeparateProcess
* @preserveGlobalState disabled
*/
public function 定数が正しく設定されているかのテスト()
{
$this->assertEquals(1, constant(‘FOO’));
}
}
~~~
これでテストがうまくいくようになりました
参考:define() + runInSeparateProcess = Constant already defined · Issue #856 · sebastianbergmann/phpunit
コメント