Методы Codeception \ Util \ Stub :: точно и :: один раз не работают

Я использую 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();
}

9

Решение

Вам нужно пройти $this в качестве третьего параметра makeEmpty:

$stub = StubUtil::makeEmpty('myClass', [
'myMethod' => StubUtil::exactly(2, function () { return 'returnValue'; })
], $this);
6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]