私はPHPUnitテストを書いています。そこでは、いくつかの依存関係をモックする必要がありますが、それでも以前と同じように機能するために、いくつかのメソッドが必要です。つまり、私は持っています:
class Dependency {
// some stuff not important for the test
public function thisOneINeed() {
/// complex code
}
// some more stuff
}
だから私はこのようなことをしていました:
// prepare mock object
$dep = $this->getMockBuilder('Dependency')->disableOriginalConstructor()->getMock();
// mock out some other method that should return fixed value
$dep->expects($this->any())->method("shouldGetTrue")->will($this->returnValue(true));
// run test code, it will use thisOneINeed() and shouldGetTrue()
$result = $testSubject->runSomeCode($dep);
$this->assertEquals($expected, $result);
そして、メソッドがモックアウトされていることを除いて、すべてが正常であるため、複雑なコードを実行できず、正しく機能thisOneINeed()
するために実行する必要があります。runSomeCode()
そのコードは thisOneINeed()
他のメソッドを呼び出しませんが、適切なテストに必要であり、固定値を返さないため、静的なreturnValue()をそこに置くことはできません。returnValue()
また、AFAIK PHPunitには、 「親を呼び出す」というようなメソッドはありません。ありますreturnCallback()
が、私が見る限り、「親クラスに対してこのメソッドを呼び出す」と言う方法はありません。
のすべてのメソッドのリストを作成し、そこからDependency
削除thisOneINeed
して、モックを作成するときに渡すことsetMethods()
ができますが、そのアプローチは好きではなく、ぎこちなく見えます。
私もこれを行うことができます:
class MockDependency extends Dependency
{
// do not let the mock kill thisOneINeed function
final public function thisOneINeed()
{
return parent::thisOneINeed();
}
}
次に、を使用MockDependency
してモックオブジェクトを作成します。これも機能しますが、手動でモックを作成する必要はありません。
それで、これを行うためのより良い方法はありますか?