2016-05-15 2 views
0

Я довольно новичок в фреймворке PHP Mockery и пытаюсь проверить несколько функций на функции изнашиваемого запроса на обслуживание. Различные функции отправляют одинаковые имена переменных с разными значениями. Я бы хотел протестировать, чтобы каждый случай попадал в издевавшийся класс. Могу ли я получить несколько аргументов с моей измененной функцией и вернуть каждый из них в функцию тестера?Возвращаемые аргументы, отправляемые на издеваемую функцию Mockery?

Функция для теста:

public function doSomething() { 
    $result = $this->serviceRequest('stuff', '/url', []); 
    return $result; 
} 

псевдокод для функции тестирования:

public function testDoSomething() { 

    $service_mock = $this->mockService(); 
    $this->assertEquals($service_mock->doSomething(), $returnedArgs); 
} 

Я бы в идеале хотел бы взять эти три аргумента, посылаемого на издеваться, вернуть их с издеваться-х andReturn() или что-то подобное в первоначальном методе тестирования (чтобы проверить, что они отправляются макету). Есть ли хороший способ сделать это или обычную практику, которую мне не хватает?

Прямо сейчас, мой макет выглядит похож на этот псевдокод (и эти 3 аргументы проверяемого в закрытии $args):

 $client->shouldReceive('serviceRequest')->withArgs($args)->once()->andReturnUsing($args)->getMock(); 

Спасибо!

ответ

2

Вы можете использовать обратный вызов для этого: Нижеприведенный пример адаптирован к документам Mockery, хотя он использует его в качестве примера для передачи ссылок, его можно использовать для любых пользовательских ожиданий.

$m->shouldReceive('insert')->with(
    \Mockery::on(function(&$data) use($logger) { 
     if (!is_array($data)) return false; 
     $data['_id'] = 123; 
     $logger->logParameters('insert', $data); 
     return true; 
    }), 
    \Mockery::any() 
); 

http://docs.mockery.io/en/latest/reference/pass_by_reference_behaviours.htm

+1

Если вам нужно высмеивать то, что возвращает значения на основе аргументов, а не только проверить, что аргументы, что вы ожидаете помните 'andReturnUsing()' действительно принимает замыкание, как Аскер упоминалось. Он передал аргументы, предоставленные методу. – ToothlessRebel

Смежные вопросы