【发布时间】:2014-11-26 05:31:52
【问题描述】:
我正在使用 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();
}
}
如您所见,我调用了一次 myMethod。但是测试通过了。 与方法 ::once 相同的问题,因为此方法使用相同的类 PHPUnit_Framework_MockObject_Matcher_InvokedCount (下面的“匹配器”)。 只有当我调用的次数超过预期的次数(>2)时,测试才会失败。因为匹配器的方法“调用”检查计数是否超过预期。但是看不到是否有人调用 matcher 的方法“验证”来检查 myMethod 调用是否低于预期。
抱歉,stackoverflow,这是我的第一个问题。
更新
我快速而糟糕的临时解决方案:
将存根添加到帮助程序中
$I->addStubToVerify($stub);
将方法添加到帮助程序中以进行验证:
protected $stubsToVerify = [];
public function verifyStubs()
{
foreach ($this->stubsToVerify as $stub) {
$stub->__phpunit_getInvocationMocker()->verify();
}
return $this;
}
在Cest的方法_after()中调用这个方法:
public function _after(UnitTester $I)
{
$I->verifyStubs();
}
【问题讨论】:
标签: php unit-testing stub codeception