これが私が単体テストしているクラスです。現在、私はdoSomething
機能をテストしています:
class FooClass {
public function doSomething( $user ) {
$conn = $this->getUniqueConnection( $user->id );
$conn->doSomethingDestructive();
}
private function getUniqueConnection( $id ) {
return new UniqueConnection( $id );
}
}
ご覧のとおり、関数は、受け取った引数のプロパティに基づいて (ここではテストしていないクラス)doSomething
の新しいインスタンスを取得します。UniqueConnection
問題は、UniqueConnection:: doSomethingDestructive
メソッドが破壊的であるため、テスト中に呼び出すことができないことです。UniqueConnection
したがって、実際のものを使用するのではなく、スタブ/モックしたいと思います。
モックを注入する方法がわかりませんUniqueConnection
。UniqueConnection
コンストラクターの引数を作成FooClass
しますが、ご覧のとおり、関数のパラメーターに基づいて新しいコンストラクターが作成され、doSomething
呼び出される可能性のある一意の ID はすべて事前にわかりません。
私が見ることができる唯一のオプションは、それ自体ではFooClass
なくモックをテストするFooClass
ことです。getUniqueConnection
次に、関数をモック/スタブを返す関数に置き換えます。これはモックをテストするのは悪いようですが、それ以外の方法で目的を達成する方法がわかりません。 UniqueConnection
はサード パーティ ベンダーのライブラリであり、変更できません。