PHPUnit:模拟一个方法来表现得像身份

Mar*_*ier 5 php testing phpunit unit-testing

使用 PHPUnit,有没有办法模拟一个方法并使其表现得像identity (x->x) ?围绕以下内容:

$this->myMethod(Argument::any())->willReturn(<should return the argument untouched>)
Run Code Online (Sandbox Code Playgroud)

Mat*_*teo 2

您可以使用该returnArgument() 方法。来自文档:

有时,您希望返回方法调用的参数之一(未更改)作为存根方法调用的结果。例 9.4 展示了如何使用returnArgument()代替 来 实现这一点returnValue()

例如:

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

        // Configure the stub.
        $stub->method('doSomething')
             ->will($this->returnArgument(0));

        // $stub->doSomething('foo') returns 'foo'
        $this->assertEquals('foo', $stub->doSomething('foo'));

        // $stub->doSomething('bar') returns 'bar'
        $this->assertEquals('bar', $stub->doSomething('bar'));
    }
}
Run Code Online (Sandbox Code Playgroud)