1

たとえば、次のクラスがあるとします。

class Foo {

    public function add($x, $y)
    {
        return $x + $y;
    }

    public function subtract($x, $y)
    {
        return $x - $y;
    }
}

add メソッドの動作のみを変更したかったのです。

$mock = $this->getMock('Foo');
$mock->expects($this->once())->method('add')->will($this->returnCallback(function ($x, $y) {
    return ($x + 0) + ($y + 0);
}));

$this->assertEquals(4, $mock->add(2,2));
$this->assertEquals(2, $mock->subtract(4,2));

減算メソッドが null を返すようになったのはなぜですか? 普通に振る舞えると思っていたのに。

Failed asserting that null matches expected 2.
4

2 に答える 2

6

モックしたいメソッドを getMock に指定して、部分的なモックを行う必要があります。

$mock = $this->getMock('Foo', array('add');

このように、 add メソッドだけがモックされ、残りのオブジェクトは通常どおりに動作します。

于 2013-01-17T10:03:55.427 に答える
2

次のように使用します。

$mock = m::mock('Foo[add]');
于 2013-01-17T10:04:17.250 に答える