web-dev-qa-db-ja.com

メソッドに渡された値を返す

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

string DoSomething(string whatever);

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

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

何か案は?

317
Steve Dunn

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

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

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

.Returns<string>(x => x);
426
mhamrah

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

_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つのみを使用する場合でも、常にすべての引数を参照する必要があります。

199
Steve

汎用の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);
52
WDuffy