Я использую 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 один раз. Но тест пройден.
Та же проблема с методом :: один раз, потому что этот метод использует тот же класс PHPUnit_Framework_MockObject_Matcher_InvokedCount (‘matcher’ ниже).
Тест не пройдёт, только если я позвоню больше ожидаемого времени (> 2). Поскольку метод matcher ‘вызвал’ проверяет, считается ли больше ожидаемого. Но не вижу, вызывает ли кто-нибудь метод matcher ‘verify’, чтобы проверить, вызван ли 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();
}
Вам нужно пройти $this
в качестве третьего параметра makeEmpty
:
$stub = StubUtil::makeEmpty('myClass', [
'myMethod' => StubUtil::exactly(2, function () { return 'returnValue'; })
], $this);
Других решений пока нет …