如何将一组测试用例发送到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 ]; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |