我有两个班级,父母和孩子:
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 上运行。换句话说,检验的是 Child 是否正确地遵守了 Liskov 替换原则。使用抽象基类和空继承类是必要的,因为 PHPUnit 感觉不像运行你的基类测试两次。
以上所有工作。但是,现在我想添加一个依赖testParentAction()
项testChildAction()
(即在定义/** @depends testParentAction */
之前添加testChildAction()
)。
这不起作用。因为 PHPUnit 不会改变运行测试的顺序以满足依赖关系,并ChildTest
在运行它继承的测试之前运行定义的测试ParentTest
,所以它总是会导致testChildMethod()
被跳过。
是否可以强制 PHPUnit 先运行继承的测试?或者是否有另一种(干净的)方法来强制执行依赖?