Phpunit不执行有效的父测试用例


Phpunit does not execute effective parent test case?

我目前正在使用PHPUnit (CLI)测试API的包装器。由于测试的性质,我几乎可以使用相同的代码来测试两个不同的用例。唯一的区别是我作为参数发送给API的值。

因此,我决定编写一个类DefaultTest,其中我使用API使用的默认值测试API,第二个类CustomTest(Case)中我使用不同的值测试参数容器。CustomTest继承自DefaultTest,因为用于验证返回数据的所有函数在这两种情况下都是等效的。

这里有一些代码供你理解:

class DefaultTest extends PHPUnit_Framework_TestCase {
    public function testAPIMethod()
    {
        $this->checkParameterContainer();
        $this->validateResults();
    }
    public function checkParameterContainer() 
    {
        /* Set up default parameter container */
    }
    public function validateResults() 
    {
        /* Validate the results */
    }
}
class CustomTest extends DefaultTest {
    public function checkParameterContainer() 
    {
        /* Set up custom parameter container */
    }
    public function validateResults() 
    {
        parent::validateResult();
    }
}

PHPUnit接受子类,执行testAPIMethod,导致执行CustomTest::checkParameterContainer()和DefaultTest::validateResults()。

但是DefaultTest的testAPIMethod永远不会被执行,因为DefaultTest::checkParameterContainer()永远不会被调用。

两个类都是完全有效的testcase,并且DefaultTest在未特化时正常执行。

所以,我的问题是:为什么会这样?我错过什么了吗?这是故意的吗?

以防万一,有人需要它:PHPUnit使用反射来查找每个类上的测试方法,但不会在父类中搜索。因此,在子测试类中需要以下内容:

public function testAPIMethod()
{
    parent::testAPIMethod();
}