親と子の2つのクラスがあります。
class Parent
{
public function parentAction() {...}
}
class Child extends Parent
{
public function childAction() {...}
}
現在、これらを PHPUnit でテストしています。(私は真に単体テストを行っているわけではありませんが、質問の目的上、私が単体テストを行っていると想定できると思います。これらのテスト クラスを使用してこれを行います。
abstract class ParentBaseTest extends PHPUnit_Framework_TestCase
{
public function testParentAction() {...}
protected function factoryMethod()
{
return new Parent();
}
}
class ParentTest extends ParentBaseTest
{
}
class ChildTest extends ParentBaseTest
{
protected function factoryMethod()
{
return new Child();
}
public function testChildAction() {...}
}
ここで factoryMethod で継承を使用する背後にある考え方は、Parent のテストを書き直すことなく、ParentBaseTest からのテストが Child でも実行されるということです。つまり、テストは、チャイルドがリスコフの置換原理を適切に遵守しているかどうかです。抽象基本クラスと空の継承クラスを使用する必要があるのは、そうしないと PHPUnit が基本クラスのテストを 2 回実行したくないからです。
上記のすべてが機能します。ただし、依存関係を追加したいtestParentAction()
(testChildAction()
つまり、定義/** @depends testParentAction */
の前に追加する)。testChildAction()
これは動作しません。PHPUnit は、依存関係を満たすためにテストが実行される順序を変更せず、ChildTest
から継承したテストを実行する前にで定義されたテストを実行するためParentTest
、常にtestChildMethod()
スキップされます。
PHPUnit に継承されたテストを最初に実行させることは可能ですか? または、依存関係を強制する別の (クリーンな) 方法はありますか?