2013-03-08 50 views
1

我有下面的代碼,我期望在運行時失敗,因爲類DoesNothing不使用模擬類或調用任何所需的方法它。嘲笑/ Etsy PHPExtensions不會失敗測試,​​如果所需的方法不叫

<?php 
class DoesNothing 
{ 

} 

class DoesNothingTest extends YourMockeryTestCase 
{ 
    /** 
    * @test 
    */ 
    public function somethingIsCalled() 
    { 
     $this->mock = Mockery::mock(); 

     $keys = array(
      '1234', 
      'abcxyz', 
      '*&(%&^$-*/[email protected]:{}', 
      ')*&GA^FAUIB(*', 
      '', 
      ' ', 
     ); 

     foreach ($keys as $key) { 
      $this->mock 
       ->shouldReceive('remove') 
       ->atLeast()->times(1) 
       ->with($key); 
     } 
     $var = new DoesNothing($this->mock); 
    } 
} 

但是,當我運行它,它通過。我希望它說「刪除方法不叫」等。

什麼可能是錯的?與嘲笑如何談論PHPUnit有關?

感謝, 馬丁

編輯: 我shoudl還別說,我們使用的是Etsy's PHPExtensions將其整合到PHPUnit的

+0

的PHPUnit 3.6.11 BTW – 2013-03-08 17:01:10

回答

5

方法名稱應與test啓動,否則的PHPUnit不會將其確定爲測試。

public function testSomethingIsCalled() 

編輯

你要叫Mockery::close()在拆卸方法要執行的預期。即

/** 
* Tear down 
*/ 
public function tearDown() 
{ 
    \Mockery::close(); 
} 
+0

的PHPDoc的語法讓PHPUnit的知道這是不帶前綴的文件在這裏測試:http://www.phpunit.de/manual/current/en/appendixes.annotations.html(滾動到底部) – 2013-03-11 09:07:02

+0

@馬丁萊恩,不知道。你每天學習新的東西 ;)。試着在你的測試中加入一個斷言,100%確定你的測試至少能正確執行。 – 2013-03-11 09:15:52

+0

:)是的,我只是添加了'$ this-> assertTrue(false)',它不幸地發現了失敗。 :( – 2013-03-11 09:42:35