加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何将一组测试用例发送到PHPUnit willReturnOnConsecutiveCalls

发布时间:2020-12-13 22:27:49 所属栏目:PHP教程 来源:网络整理
导读:我试图将预先计算的测试用例数组发送到一个模拟中,以便在连续调用时返回 – 类似于map函数.但是它需要一个参数列表,而不是一个数组. 我的数组已由夹具生成器生成,并且可能具有可变长度. 我想要做的就是这样,但当然这会导致它在第一次调用时返回整个数组. //
我试图将预先计算的测试用例数组发送到一个模拟中,以便在连续调用时返回 – 类似于map函数.但是它需要一个参数列表,而不是一个数组.

我的数组已由夹具生成器生成,并且可能具有可变长度.

我想要做的就是这样,但当然这会导致它在第一次调用时返回整个数组.

// In a test case:
$processorMock
    ->method('process')
    ->willReturnOnConsecutiveCalls(
        $fixtureLoader->getProcessorScenarios() // how to explode this?
    );

// class FixtureLoader pseudocode:
function getProcessorScenarios(){
    return [ 
       [ $param1,$param2,$param3 ],// case 1
       [ $param1,// case 2
       ...
       [ $param1,// case N
    ];
}

我想从夹具加载器中构造返回的数组,使用list()或一些var-args爆炸语言构造,如“…”在其他语言中,但找不到任何有效的本机.

我确实感觉像一个hacky方法,我将作为一个初始答案Q& A风格发布.我想知道这是不是最好的方法.

解决方法

我发现的方法是使用call_user_func_array函数将数组扩展为参数.

call_user_func_array(
        [$processorMock->method('process'),'willReturnOnConsecutiveCalls'],$fixtureLoader->getProcessorScenarios());

这感觉很讨厌,打破了模拟的流畅定义.我猜它会有一些缺点,例如未来的脆弱性.

在它成为复制面食模板解决方案之前,我想找到一个更甜的选择!

更新:

我发现我需要在asserts中包含一些参数,因为它们是更复杂的类型,例如类.

// class FixtureLoader pseudocode:
function getProcessorScenarios(){
    $param1 = PHPUnit_Framework_Assert::IsInstanceOf('MyAppModelThingumy');
    $param1 = PHPUnit_Framework_Assert::isInstanceOf('MyAppModelWhatsit');
    return [ 
       [ $param1,$param2c1,$param2c2,$param2c3,// case N
    ];
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读