5

これはちょっと変わったものです。パラメーターを持たないメソッドをスタブしようとしていますが、パラメーターが何であるかは気にしないので、引数を無視しています。次のようになります。

List<Foo> ignored;
A.CallTo(() => fake.Method(out ignored))
  .Returns(something);

スタブ化されたメソッドが次のように呼び出された場合、これは問題なく機能します。

List<Foo> target;
var result = service.Method(out target);

targetただし、が事前に初期化されている場合は機能しません。例えば:

List<Foo> target = new List<Foo>();
var result = service.Method(out target);

偽物を調べるTagと、出力パラメータが記録されていることがわかり<NULL>ます。出力ターゲットがすでに何かに設定されている場合、それらは一致していないと思われます。ignoredテストで を に設定してみましnew List<Foo>()A<List<Foo>>.Ignoredが、どちらも結果に影響しません。

私の質問は、 out パラメータのターゲットに既に値がある場合、 out パラメータなしでメソッドをスタブする方法を知っている人はいますか?

4

1 に答える 1

5

更新: FakeItEasy 1.23.0以降、マッチング時にパラメーターの初期値outが無視されるため、WithAnyArguments

、5分後、許容できる解決策を見つけました(このシナリオでは)。このメソッドに渡される引数には興味がないので、WithAnyArguments()メソッドを使用するとうまくいくようです。これは、引数チェックをすべてまとめてショートカットする必要があると思います。

最終的なコードは次のとおりです。

List<Foo> ignored;
A.CallTo(() => fake.Method(out ignored))
  .WithAnyArguments()
  .Returns(something);

すべての引数を無視したくない場合、これは明らかに問題を解決しません。誰もより洗練されたソリューションを持っていない場合にのみ、この回答を受け入れます。

于 2012-01-24T23:58:13.417 に答える