Я использую 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 (ниже). Тест завершится неудачей, только если я назову более ожидаемое время (> 2). Поскольку метод matcher's 'invoked' проверяет, подсчитывается ли больше ожидаемого. Но не вижу, может ли кто-нибудь вызвать метод «проверять», чтобы проверить, был ли метод 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);