私が書いている単体テストがあり、厄介な問題に遭遇しました...私がテストしている次の関数があるとしましょう:
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
}
ただし、次のエラーメッセージが表示されます。
ClassName :: addNewFriendsToProfile()へのパラメーター1は参照であると予想され、値が指定されます
これは私には非常に奇妙に思えました。まず、参照によって配列を渡すだけなので、これで問題はないはずです。第二に、なぜパラメータ1なのか?パラメータ0という意味ではありませんか?次に、呼び出しを次のように変更してみました。
$this->mockOfClass->functionToTest(&$data, true);
この変更を行った後は、正常に機能します。残念ながら、次の警告も表示されます。
呼び出し時の参照渡しは、xxx行の/PathToFileで非推奨になりました
実際のコードを実行しているときにこのエラーは発生しません。このエラーは単体テストでのみスローされます。また、私がモックしているクラスにはメソッドがあるので、モックを使用する必要があります。そのため、クラスの新しいインスタンスを作成して、テスト中のメソッドを呼び出すことはできません。これを回避する方法はありますか?