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

Phpunit不执行有效的父测试用例?,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,我目前正在使用PHPUnit(CLI)测试API的包装器。 由于测试的性质,我几乎可以使用相同的代码来测试两个不同的用例。唯一的区别在于我将值作为参数发送给API 因此,我决定编写一个类DefaultTest,其中我使用API使用的默认值测试API,第二个CustomTest(案例)中我使用不同的值测试参数容器。CustomTest继承自DefaultTest,因为用于验证返回数据的所有函数在这两种情况下都是等效的 以下是一些代码供您理解: class DefaultTest extends P

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

因此,我决定编写一个类DefaultTest,其中我使用API使用的默认值测试API,第二个CustomTest(案例)中我使用不同的值测试参数容器。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()永远不会被调用

这两个类都是完全有效的测试用例,当没有专门化时,DefaultTest正常执行


所以,我要问你们:为什么?我错过什么了吗?这是设计的吗?

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

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

似乎只有公共函数被设计调用。。。更正我的示例代码(再次…)所有函数实际上都是公共的。为什么要为不同的测试用例编写两个类,而不是使用数据提供程序为每个类提供不同的数据?因为数据是唯一改变的东西,所以您可以完全重用代码。很抱歉这么晚才回到您的评论。你是对的,这实际上是一个更干净的解决问题的方法。我将采用相应的测试。谢谢你的反馈。不过,我想知道为什么我的测试显示出这种行为,因为它实际上应该是有效的…谢谢你的回答。我无法确认,因为这个项目已经完成很久了。其他人能证实这个事实吗?这样我就可以勾选这个作为正确答案了?