Использование Laravel и Mockery

Я просто пытаюсь войти в это: у меня есть класс A, который использует службы класса B. Чтобы изолировать этот класс A и протестировать его, я хотел бы использовать Mockery и класс-заглушку B.

Для этого я сделал

public function testMock()
{

    $driver = Mockery::mock('Driver');
    App::instance('Driver',$driver);
    $driver->shouldReceive('get')->once()->andReturn('Did the job');

    $request = new BSRequest($driver);

    $this->assertEquals($request->get(),'Did the job');

}

Но я всегда получаю это сообщение после запуска теста ErrorException: аргумент 1, переданный в BSrequest :: __ construct (), должен быть экземпляром Driver, экземпляром Mockery_0_Library_Driver, который вызывается в /var/www/laravel/app/tests/ExampleTest.php на строка 56 и определена

И мой BSrequest таков:

    class BSrequest {

private $driver;

public function __construct(Driver $driver) {
    $this->driver = $driver;
}

function get() {
    return $this->driver->get();
}}

Не могли бы вы рассказать мне, как этого добиться? Спасибо


person Ajaxiome    schedule 29.10.2014    source источник
comment
Действительно ли существует класс Driver?   -  person Andreas    schedule 30.10.2014


Ответы (2)


Я считаю, что у вас проблема с пространством имен ИЛИ проблема с автозагрузкой.

В тестовом файле убедитесь, что класс драйвера был загружен автоматически. Вы можете сделать что-то вроде этого:

public function testDriverClassIsAvailable()
{

    $driver = new Driver();

    $this->assertEquals(get_class($driver), 'Driver');
}

Если это сработает, то вы будете знать, что ваш Driver класс загружен автоматически и доступен, и что есть проблема с классом BSRequest, потому что у него нет доступного класса Driver. Если вы используете пространства имен, убедитесь, что нет опечаток.

Имитируемый экземпляр Driver должен удовлетворять подсказке типа, требуемой BSRequest->__construct(), поэтому вам обязательно нужно включить подсказку типа.

person awei    schedule 15.04.2015

На самом деле все отлично работает при написании

public function __construct($driver) {
    $this->driver = $driver;
}

Это означает удаление элемента управления Type в $ driver. Но я уверен, что мы сможем добиться всего этого, сохранив Driver $ driver

К сожалению, я не знаю, как

person Ajaxiome    schedule 30.10.2014