我有我写,遇到了一个恼人的问题一个单元测试...比方说,我有以下功能我测试:的PHPUnit和呼叫时间传递通过引用
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到ClassName :: addNewFriendsToProfile()预计会成为参考,给出的值
这对我来说似乎很奇怪。首先,我只是通过引用传递一个数组,所以它不应该有这个问题。其次,为什么参数1?这是不是意味着参数0?然后,我尝试将呼叫更改为以下内容:
$this->mockOfClass->functionToTest(&$data, true);
做出此更改后,它可以正常工作。不幸的是,它也产生了以下警告:
通话时传递的引用已被弃用/ PathToFile在线XXX
运行的实际代码时,我没有遇到这个错误。它只在单元测试中抛出这个错误。另外,我需要使用模拟,因为我正在嘲笑的课程中有方法;所以我不能简单地创建一个新的类实例并调用正在测试的方法。有什么方法可以解决这个问题吗?
相关? http://stackoverflow.com/questions/5170747/pass-by-reference-in-a-callback-when-mocking-in-phpunit –
谢谢蒂姆,这是非常有帮助的。看起来问题与在PHPUnit中克隆的每个参数有关。 –