2

我一定遗漏了一些东西,但我遵循了本教程: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'));

4

1 回答 1

3

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

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

$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”作为返回一样。

于 2012-10-05T15:15:34.893 回答