如何模拟名称为"方法&#34 ;?的方法

时间:2016-10-26 09:11:22

标签: phpunit

class Foo {
  public function method() {

  }
  public function bar() {

  }
}

如果我有课程Foo,我可以使用以下语法更改bar的行为。

$stub = $this->createMock(Foo::class);

$stub->expects($this->any())
    ->method('bar')
    ->willReturn('baz');
  

限制:命名方法"方法"上面显示的示例仅适用   当原始类没有声明名为"方法"的方法时。如果   原始类确实声明了一个名为"方法"的方法。然后   $ stub->期待($这 - >任何()) - >方法(' doSomething的') - > willReturn('富&#39);   必须使用。

https://phpunit.de/manual/current/en/test-doubles.html#test-doubles.stubs

但我的问题是,如何在PHPUnit中更改Foo::method()的行为?有可能吗?

1 个答案:

答案 0 :(得分:2)

这很好用: 使用PHP 7.0.9 / PHPUnit 4.8.27进行测试

<H|T>

修改

使用PHP 7.0.9 / PHPUnit 5.6.2测试另外:

public function testMethod()
{
    $stub = $this->getMock(Foo::class);

    $stub->expects($this->once())
        ->method('method')
        ->willReturn('works!');

    $this->assertEquals('works!', $stub->method('method'));
}

仅显示第一个方法的弃用警告,但测试成功通过。