PHPUnit Mock稍后改变期望

Mat*_*att 9 php phpunit mocking

我有一个简单的用例.我想有一个setUp方法,它将导致我的模拟对象返回一个默认值:

$this->myservice
        ->expects($this->any())
        ->method('checkUniqueness')
        ->will($this->returnValue(true));
Run Code Online (Sandbox Code Playgroud)

但是在某些测试中,我想返回一个不同的值:

$this->myservice
        ->expects($this->exactly(1))
        ->method('checkUniqueness')
        ->will($this->returnValue(false));
Run Code Online (Sandbox Code Playgroud)

我过去曾使用过GoogleMock for C++,它有"returnByDefault"或其他东西来处理它.我无法弄清楚这是否可能在PHPUnit中(没有api文档,代码很难通读以找到我想要的东西).

现在我不能只改为$this->myservice新的模拟,因为在设置中,我将其传递给需要模拟或测试的其他东西.

我唯一的另一个解决方案是我失去了设置的好处,而是必须为每次测试建立我的所有模拟.

cwe*_*ske 5

您可以将setUp()代码移至另一个具有参数的方法中。然后从 调用此方法setUp(),您也可以从测试方法调用它,但参数与默认参数不同。