これが私が単体テストしているクラスです。現在、私は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はサード パーティ ベンダーのライブラリであり、変更できません。