483

我在接口上有一个方法:

string DoSomething(string whatever);

我想用 MOQ 模拟它,以便它返回传入的任何内容 - 例如:

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

有任何想法吗?

4

3 回答 3

660

您可以使用带有输入参数的 lambda,如下所示:

.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));

您总是需要引用所有参数,以匹配方法的签名,即使您只打算使用其中一个。

于 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 回答