2013-05-08 87 views
2

我目前正在使用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在沒有專門化時會正常執行。

所以,我的問題給你們:爲什麼呢?我在這裏想念什麼?這是設計嗎?

+0

看起來只有公共職能被設計調用。 – Adder 2013-05-08 13:06:35

+0

Argh ...糾正我的示例代碼(再次...)所有功能實際上是公開的。 – PvB 2013-05-08 13:13:30

+2

爲什麼你要爲不同的測試用例做兩個類,而不是爲每個數據提供不同的數據?只要數據是唯一改變的,你就可以完全重用代碼。 – Schleis 2013-05-08 14:00:05

回答

0

如果有人需要它:PHPUnit使用反射來查找每個類的測試方法,但不會在父類中進行搜索。因此,兒童測試課程需要以下內容:

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

感謝您的答案。由於該項目已經完成很久以前,我無法確認它。其他人是否可以證實這一事實,以便我可以將其作爲正確答案來勾選? – PvB 2016-01-24 11:16:57