2013-07-12 51 views
0

有沒有辦法在測試類的構造函數/類的setUp函數中創建一個模擬,以便模擬可用於所有測試方法?嘲笑 - 在構造函數中創建一個模擬

我試圖像創建在構造函數中:

public class testMocks extends PHPUnit_Framework_TestCase { 

    protected $mock; 

    public function __construct() 
    { 
     $this->mock = Mockery::mock('myMockedClass'); 
    } 

... 

但是,這是行不通的。如果第一次測試通過,那麼即使應用程序失敗(即運行shouldreceive應該失敗),模擬的所有測試也會通過。有任何想法嗎?

回答

0

你不應該覆蓋的PHPUnit_Framework_TestCase構造,看到#15051271我的回答也#17504870

您還需要調用Mockery::close()tearDown方法。 close方法清理嘲笑容器以進行下一次測試並運行您設置的期望。

public function tearDown() 
{ 
    Mockery::close(); 
} 
+0

好吧,我已經使用安裝以及使用構造函數,但要確保我調用父類的構造嘗試。兩者都不適合我。 – BIOS

+0

看到我編輯的文章,我認爲這可能是你的問題的原因。 –

+0

不幸的不是。我正在使用tearDown,比如你的例子:(嘗試自己測試一下,在你的設置中創建一個類的模擬,並運行兩個測試,兩個測試都聲稱模擬應該接收一個方法調用,做第一遍並寫第二個測試,對模擬的斷言應該失敗(即期望方法被調用10次,但只調用一次)對於我來說,兩個測試都通過了,如果第一次測試通過,下一次測試通過,我原以爲這是非常普遍的事情 – BIOS

1

你必須使用的setUp功能,如:

public function setUp()  
{ 
    $this->mock = Mockery::mock('myMockedClass'); 
} 
+0

你真的嘗試過嗎?它不適合我。與使用constructir相同。 – BIOS

+0

當然。查看PHPUnit的文檔http://phpunit.de/manual/3.7/en/fixtures.html –