2015-01-21 58 views
0

我創建了下面的測試,使用PHPUnit文檔,它失敗,出現以下消息:爲什麼這個模擬失敗? (出自PHPUnit DOC)

PHP Fatal error: Call to undefined method Mock_SomeClass_97937e7a::doSomething(). 

有什麼不對?這是文檔中的例子。我正在使用PHPUnit 4.4.0。

<?php 

class SomeClass 
{ 

} 

class SomeClassTest extends PHPUnit_Framework_TestCase 
{ 
    public function testStub() 
    { 
     // Create a stub for the SomeClass class. 
     $stub = $this->getMockBuilder('SomeClass') 
      ->getMock(); 

     // Configure the stub. 
     $stub->method('doSomething') 
      ->willReturn('foo'); 

     // Calling $stub->doSomething() will now return 
     // 'foo'. 
     $this->assertEquals('foo', $stub->doSomething()); 
    } 
} 

回答

0

doSomething SomeClass中缺少方法。你不能嘲笑一個不存在的方法。

+0

感謝您的答覆,但它不會改變任何事情:(還沒有使用的命名空間 – olvlvl 2015-01-21 11:08:04

+0

你是對的,問題是,你實際上。在SomeClass中沒有doSomething()方法...我不知道我是否失明,但是我發誓我已經看到它;) – bbankowski 2015-01-21 15:27:09

+0

詛咒!顯然,我不能嘲笑一種不存在的方法......謝謝bbankowski。編輯你的答案,我會投票。 – olvlvl 2015-01-21 17:49:43

0

這裏的快照:

  • 聲明 「DoSomething的」 方法上的 「SomeClass的」 類。
  • 在「getMockBuilder」後使用「setMethods」例程
  • 而不是willReturn,使用「will($ this-> returnValue('foo'))」。

這裏是我的代碼:

class SomeClass 
{ 
    public function doSomething() 
    { 

    } 
} 

class StubTest extends PHPUnit_Framework_TestCase 
{ 
    public function testStub() 
    { 
     // Create a stub for the SomeClass class. 
     $stub = $this->getMockBuilder('SomeClass') 
         ->setMethods(array('doSomething')) 
         ->getMock(); 

     // Configure the stub. 
     $stub->expects($this->any()) 
       ->method('doSomething') 
       ->will($this->returnValue('foo')); 

     // Calling $stub->doSomething() will now return 
     // 'foo'. 
     $this->assertEquals('foo', $stub->doSomething()); 
    } 
}