vat*_*vit 10 php unit-testing stub codeception
我正在使用Codeception\Util\Stub来创建单元测试.我想确保我的方法多次调用.为此,我正在使用'确切'的方法.
例:
use \UnitTester;
use \Codeception\Util\Stub as StubUtil;
class someCest
{
public function testMyTest(UnitTester $I)
{
$stub = StubUtil::makeEmpty('myClass', [
'myMethod' => StubUtil::exactly(2, function () { return 'returnValue'; })
]);
$stub->myMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
如你所见,我给myMethod打过一次电话.但测试通过了.与method :: once相同的问题,因为此方法使用相同的类PHPUnit_Framework_MockObject_Matcher_InvokedCount(下面的'matcher').只有当我打电话超过预期时间(> 2)时,测试才会失败.因为matcher的方法'invoked'检查计数是否超出预期.但是看不出是否有人调用matcher的方法'verify'来检查myMethod是否调用的次数少于预期.
抱歉stackoverflow,这是我的第一个问题.
UPDATE
我的快速和BAD临时解决方案:
将存根添加到帮助器中
$I->addStubToVerify($stub);
Run Code Online (Sandbox Code Playgroud)
将方法添加到帮助程序以验证:
protected $stubsToVerify = [];
public function verifyStubs()
{
foreach ($this->stubsToVerify as $stub) {
$stub->__phpunit_getInvocationMocker()->verify();
}
return $this;
}
Run Code Online (Sandbox Code Playgroud)
在Cest的方法_after()中调用此方法:
public function _after(UnitTester $I)
{
$I->verifyStubs();
}
Run Code Online (Sandbox Code Playgroud)
小智 6
您需要将$this第三个参数传递给makeEmpty:
$stub = StubUtil::makeEmpty('myClass', [
'myMethod' => StubUtil::exactly(2, function () { return 'returnValue'; })
], $this);
Run Code Online (Sandbox Code Playgroud)