为什么这个模拟失败了? (来自PHPUnit doc)

时间:2015-01-21 10:33:35

标签: php mocking phpunit

我使用PHPUnit文档创建了以下测试,但它失败并显示以下消息:

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());
    }
}

2 个答案:

答案 0 :(得分:1)

SomeClass中缺少

doSomething方法。你不能模拟一个不存在的方法。

答案 1 :(得分:1)

这是快照:

  • 在“SomeClass”类中声明“doSomething”方法。
  • 在“getMockBuilder”
  • 之后使用“setMethods”例程
  • 使用“will($ this-&gt; returnValue('foo'))”。而不是willReturn。

这是我的代码:

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());
    }
}