我目前正在使用PHPUnit(CLI)測試包裝到API。 由於測試的性質,我幾乎可以使用相同的代碼來測試兩種不同的用例。唯一的區別是我發送給API的值作爲參數。Phpunit不執行有效的父測試用例?
因此,我決定編寫一個類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在沒有專門化時會正常執行。
所以,我的問題給你們:爲什麼呢?我在這裏想念什麼?這是設計嗎?
看起來只有公共職能被設計調用。 – Adder 2013-05-08 13:06:35
Argh ...糾正我的示例代碼(再次...)所有功能實際上是公開的。 – PvB 2013-05-08 13:13:30
爲什麼你要爲不同的測試用例做兩個類,而不是爲每個數據提供不同的數據?只要數據是唯一改變的,你就可以完全重用代碼。 – Schleis 2013-05-08 14:00:05