PHPUnit和Call-time传递引用
发布时间:2020-12-13 16:45:39 所属栏目:PHP教程 来源:网络整理
导读:我有一个单元测试,我正在编写并遇到一个恼人的问题……假设我有以下我正在测试的功能: public function functionToTest(array $data,parameter2){ // perform some action on the array that is being passed in by reference} 现在,当我尝试在单元测试中调
我有一个单元测试,我正在编写并遇到一个恼人的问题……假设我有以下我正在测试的功能:
public function functionToTest(array &$data,parameter2) { // perform some action on the array that is being passed in by reference } 现在,当我尝试在单元测试中调用此函数时,我会做这样的事情: public function testMyFunction() { $data = array('key1' => 'val1'); $mockOfClass = $this->getMockBuilder('ClassName') ->disableOriginalConstructor() ->setMethods(array('method1','method2')) // My function to test is NOT in this list ->getMock(); $this->mockOfClass->functionToTest($data,true); // Perform assertions here } 但是,我收到以下错误消息:
这对我来说似乎很奇怪.首先,我只是通过引用传递一个数组,所以它应该没有问题.其次,为什么参数1?这不是指参数0吗?然后,我尝试将呼叫更改为以下内容: $this->mockOfClass->functionToTest(&$data,true); 进行此更改后,它工作正常.不幸的是,它还会产生以下警告:
运行实际代码时我没有遇到此错误.它只会在单元测试中抛出此错误.此外,我需要使用模拟,因为我正在嘲笑的类中有方法;所以我不能简单地创建类的新实例并调用正在测试的方法.有什么方法可以解决这个问题吗? 解决方法
事实证明,PHPUnit克隆了传入的每个参数(感谢Tim Lytle指出我来源:
Pass by reference in a callback when mocking in PHPUnit).如果在单元测试中在调用时没有引用传入数组,则会导致错误.幸运的是,解决方案很简单.我不是通过引用传递数组,而是按值传递数组并返回数组.
之前: public function someFunction(array &$myArray) { $myArray[] = 'new val'; } 后: public function someFunction(array $myArray) { $myArray[] = 'new val'; return $myArray; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |