2012-12-08 91 views
2

我將如何進行單元測試的接口,如下面這個簡單的例子:測試驅動開發和接口

interface My_App_My_Interface 
{ 
    /** 
    * @return int 
    */ 
    public function getInteger(); 

    /** 
    * @return string 
    */ 
    public function getString(); 
} 

還怎麼會變成這樣在我的應用程序測試的目錄組織:

tests > My > App > My > InterfaceTest

+1

你想測試這個接口怎麼樣? – deceze

回答

4

你不測試接口。你測試實現。如果他們提供所有必需的功能,則應該檢查接口(由人類提供)

+0

因此,如果我正在創建一個系統,通過實現接口爲第三方系統提供接口,那麼我不會在我的代碼中提供測試? –

+0

接口無法進行測試,因爲接口中沒有代碼。 – artragis

+0

如果您提供的接口意味着兩件事之一。你期望有人實現該接口,因爲你將使用它。在這種情況下,您應該模擬此接口或創建測試實現並測試使用該接口的代碼。第二種選擇是:您提供將由其他人使用的界面(作爲合同)和實施。在這種情況下,你應該測試你的實現。不同的是提供文檔。並且最好的方法是通過創建示例測試用例。但仍然沒有辦法測試一個接口 – piotrek

0

正如piotrek所說,你永遠不會測試接口,因爲它們只是一個合約,沒有代碼。

例如,使用atoum testing framework您可以編寫一個類,實現了您的接口。

namespace mageekguy\atoum\tests; 

class TestMyInterfaceImplementation extends atoum\test{ 
    public function test__construct(){ 
     $object = new MyObject(); 
     $this->object($object)->instanceof('MyInterface'); 
    } 
    public function test_getInteger(){ 
     $object = new MyObject(); 
     $this->integer($object->getInteger); 
    } 
} 

由於接口只是提供了抽象方法,所以它們不能被實例化,因此不能編寫測試。