PHPUnit模拟对象问题

时间:2012-10-05 00:57:00

标签: php class object mocking phpunit

我必须遗漏一些内容,但我遵循了本教程:http://www.phpunit.de/manual/current/en/test-doubles.html

 <?php
    class SomeClass
    {
      public function doSomething()
      {
         // Do something.
         return 'bar';
      }
    }
 ?>

我的StubTest课程      

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

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

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

好吧也许我错过了一些东西,但是不是调用doSomething的预期值是吧?

如果我$this->assertEquals('bar', $stub->doSomething());,它将会失败。

它似乎是->will($this->returnValue('foo'));

的基础

1 个答案:

答案 0 :(得分:3)

你的考试应该通过。主代码将返回'bar',但您没有调用主代码。你嘲笑对象返回'foo'。因此,它应该返回'foo',这是你的测试所显示的。

要使用模拟模拟代码的相同返回,您将执行以下操作:

$stub = $this->getMock('SomeClass');

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

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

这将使您的测试继续进行,就好像您调用了真实函数并收到'bar'作为返回。