【发布时间】:2016-01-17 08:49:58
【问题描述】:
在我的测试中,我为一个类创建了一个测试存根,并模拟了“save”方法的输出以返回一个默认值。在每次测试运行之前,我的 setUp() 方法中有这个:
// auth adapter
$this->authMock = $this->getMockBuilder('App\\Auth')
->disableOriginalConstructor()
->getMock();
// by defaut, we'll make authenticate return a FAIL result
$this->authMock
->method('authenticate')
->willReturn(0);
然后将其注入到我的服务定位器中,覆盖应用程序使用的服务定位器(真正的 App\Auth)。但是,在实际测试过程中,我可能希望更改该方法的输出
// here, we'll make authenticate return a SUCCESS result
$this->authMock
->method('authenticate')
->willReturn(1);
无论如何,一旦我发现了问题,对于 POC,我只是将这些一个接一个地放在一起,而且似乎 PHPUnit 不允许我覆盖之前声明的模拟方法返回值:
// auth adapter
$this->authMock = $this->getMockBuilder('App\\Auth')
->disableOriginalConstructor()
->getMock();
// by defaut, we'll make authenticate return a FAIL result
$this->authMock
->method('authenticate')
->willReturn(0);
// here, we'll make authenticate return a SUCCESS result
$this->authMock
->method('authenticate')
->willReturn(1);
var_dump($this->authMock->authenticate());出口; // 返回 0 :(
我确信过去我能够做到这一点。除非它是以前版本的 PHPUnit。目前我正在使用 4.8.*。我有什么办法可以做到这一点?默认情况下,我希望通过身份验证返回 FAIL,但有些测试我可能想用 SUCCESS 覆盖它(所以就像用户通过身份验证一样)
【问题讨论】: