モデルの上部にこのインジェクション メタデータがあります。
<cfproperty name="injector" inject="wirebox" />
その後、関数で依存関係を要求し、それを使用し始めます。
variables.injector.getInstance("MyTransientDependency").doSomeStuff()
単体テストを作成する際に、MyTransientDependency オブジェクトをモックしたいのですが、wirebox によって提供されているのに、その方法がわかりません。
より現実的な例として、wirebox で getInstance() が同じ関数内で複数回呼び出され、そのたびに異なる名前が渡されたとします。そのため、getInstance 関数の戻り値をモックするのは苦痛であり、($results() のようなものが使用された場合) 依存関係が内部的に要求された順序が、関数の動作を変更することなく変更された場合、メンテナンスの悪夢になります。単体テストを更新する必要があります。とにかく、そのアプローチはただ不快に感じます。
variables.injector 参照をハイジャックし、アプリのバインダーにマップされた実際のオブジェクトではなく、単体テストで指定したモックを返すワイヤーボックス インスタンス (またはそのようなもの) をコンポーネントに与える簡単な方法があると思います ( Wirebox.cfc)... テストしているコード内の getInstance() 関数に渡された名前に基づいて実行します。
それが少し難しいのは、テストしたい単一の関数内で、同じ名前のオブジェクトの複数のインスタンスを取得し、同じ関数をモックして異なる結果を返す必要がある場合です(テストする関数が2つの「人」オブジェクトを必要とするように)そして、一方をタイプ A の人に、もう一方をタイプ B の人に初期化し、人のコンポーネントは、モックする必要がある特定の関数から異なる構造のデータを返すことが期待されます。 $results() のようなものを使用する必要はありません。おそらくそれが目的です。
しかし、私の主な問題は、トランジェントをモックする「正しい方法」は何ですか?