2016-12-27 33 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));