1

モデルの上部にこのインジェクション メタデータがあります。

<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() のようなものを使用する必要はありません。おそらくそれが目的です。

しかし、私の主な問題は、トランジェントをモックする「正しい方法」は何ですか?

4

1 に答える 1

1

ダン。ドキュメントをもう少し検索すると、見つかりました。

http://wiki.coldbox.org/wiki/MockBox.cfm#.24args()では、$args() を使用して、関数と特定の引数 (または引数のセット) を組み合わせた結果をモックする方法について概説しています。

使用例については、次のコード例の getWireBox 関数を参照してください: https://groups.google.com/forum/#!msg/coldbox/FoXPjEf798g/rVKhN-8VY34J

ワイヤーボックスをモックしてから、異なる値が渡されたときに $args() を使用して getInstance 関数をモックします。

于 2013-06-24T21:27:14.277 に答える