2016-05-15 87 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