Я пытаюсь заставить Mockery утверждать, что данный метод вызывается хотя бы один раз.
Мой тестовый класс:
use \Mockery as m; class MyTest extends \PHPUnit_Framework_TestCase { public function testSetUriIsCalled() { $uri = 'http://localhost'; $httpClient = m::mock('Zend\Http\Client'); $httpClient->shouldReceive('setUri')->with($uri)->atLeast()->once(); } }
Как вы можете видеть, есть один тест, который (надеюсь) создает ожидание вызова setUri. Поскольку нет никакого другого задействованного кода, я не могу представить, что его можно было бы назвать, и все же мой тест проходит. Может ли кто-нибудь объяснить, почему?
Вам нужно вызвать Mockery:close()
чтобы выполнить проверки для ваших ожиданий. Он также обрабатывает очистку контейнера для издевательств для следующего теста.
public function tearDown() { parent::tearDown(); m::close(); }
Чтобы избежать вызова метода close в каждом тестовом классе, вы можете просто добавить TestListener в свою конфигурацию phpunit следующим образом:
<listeners> <listener class="\Mockery\Adapter\Phpunit\TestListener"></listener> </listeners>
Этот подход объясняется в документах .
Одно из примечаний из связанных документов:
Убедитесь, что автозагрузчик Composer или Mockery присутствует в файле начальной загрузки, или вам нужно будет также определить атрибут «file», указывающий на файл вышеуказанного класса TestListener.