2016-12-27 31 views
6

比方說,我有以下接口:懲戒,在PHP返回一個發電機使用PHPUnit /功能Phake

interface MyInterface 
{ 
    public function yieldData(); 
} 

我想創建此接口的模擬,例如像這樣:

$mocked_instance = Phake::partialMock(MyInterface::class); 

模擬收益率方法的最佳方式是什麼?這是我想出了最好的:有沒有辦法PHPUnit中/ Phake可以做到這一點更接近(即返回一個生成器)功能的原始功能

Phake::when($mocked_instance)->yieldData()->thenReturn([]); 

+2

不知道如何以一種很好的方式實現這一點。除非'yield'創建它,否則你不能得到'Generator',所以我假設你需要一個虛擬助手函數/方法,其唯一目的是'產生'給你的模擬帶來一些東西。 –

回答

3

謝謝Oliver Maksimovic您的評論,這幫助我找到了適合我的解決方案。

我決定在我的基地測試用例創建以下功能:

/* 
* @param array @array 
* 
* @return \Generator|[] 
*/ 
protected function arrayAsGenerator(array $array) 
{ 
    foreach ($array as $item) { 
     yield $item; 
    } 
} 

這使我能夠做到以下幾點:

$mocked_instance = Phake::partialMock(MyInterface::class); 

$numbers = [1, 2, 3, 4, 5]; 

Phake::when($mocked_instance) 
    ->yieldData() 
    ->thenReturn($this->arrayAsGenerator($numbers));