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」を返す必要があります。

コードからの同じリターンをモックでシミュレートするには、次のようにします。

$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 に答える