予測できない値を返すクラスと、その関数を呼び出すメソッドの単体テストに問題があります。そこで、メソッドの戻り値を変更します。
インスタンスを作成できないため、そのメソッドをモックできません。次に例を示します。
// Class called MyClass
public function doSomething(){
$foo = new Foo();
$bar = $foo->getSomethingUnpredictable();
// Doing something with $bar and saves the result in $foobar.
// The result is predictable if I know what $foo is.
return $forbar;
}
// The test class
public function testDoSomething{
$myClass = new MyClass();
when("Foo::getSomethingUnpredictable()")->thenReturns("Foo");
// Foo::testDoSomething is now predictable and I am able to create a assertEquals
$this->assertEquals("fOO", $this->doSomething());
}
単体テストで Foo::testDoSomething が返すものをチェックして結果を計算するかもしれませんが、testDoSomething と doSomething の違いはほとんどありません。また、他の値で何が起こるかを確認することもできません。
varargs が使用されているため、doSomething にはパラメーターを指定できません (そのため、最適なパラメーターを追加できません)。