我目前正在使用 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() 永远不会被调用。
这两个类都是完全有效的 TestCases 并且 DefaultTest 在没有专门化时正常执行。
所以,我问你们的问题:为什么会这样?我在这里想念什么吗?这是设计使然吗?