2013-03-08 42 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