483

インターフェイスにメソッドがあります:

string DoSomething(string whatever);

これをMOQでモックしたいので、渡されたものは何でも返されます-次のようなものです:

_mock.Setup( theObject => theObject.DoSomething( It.IsAny<string>( ) ) )
   .Returns( [the parameter that was passed] ) ;

何か案は?

4

3 に答える 3

660

次のように、入力パラメーターでラムダを使用できます。

.Returns((string myval) => { return myval; });

またはもう少し読みやすい:

.Returns<string>(x => x);
于 2009-06-15T15:03:58.423 に答える
321

さらに便利なことに、複数のパラメーターがある場合は、次の方法でそれらのいずれかまたはすべてにアクセスできます。

_mock.Setup(x => x.DoSomething(It.IsAny<string>(),It.IsAny<string>(),It.IsAny<string>())
     .Returns((string a, string b, string c) => string.Concat(a,b,c));

引数の 1 つだけを使用する場合でも、メソッドのシグネチャと一致するように、常にすべての引数を参照する必要があります。

于 2012-08-22T13:12:40.037 に答える
86

ジェネリックReturns<T>メソッドは、この状況を適切に処理できます。

_mock.Setup(x => x.DoSomething(It.IsAny<string>())).Returns<string>(x => x);

または、メソッドが複数の入力を必要とする場合は、次のように指定します。

_mock.Setup(x => x.DoSomething(It.IsAny<string>(), It.IsAny<int>())).Returns((string x, int y) => x);
于 2011-05-31T22:47:16.087 に答える