我在界面上有一个方法:
string DoSomething(string whatever);
我想用MOQ来模拟它,以便它返回传入的内容 - 例如:
_mock.Setup( theObject => theObject.DoSomething( It.IsAny<string>( ) ) )
.Returns( [the parameter that was passed] ) ;
有什么想法吗?
答案 0 :(得分:420)
您可以使用带有输入参数的lambda,如下所示:
.Returns((string myval) => { return myval; });
或稍微更具可读性:
.Returns<string>(x => x);
答案 1 :(得分:199)
更有用的是,如果您有多个参数,可以使用以下方法访问其中的任何/所有参数:
_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));
您总是需要引用所有参数,以匹配方法的签名,即使您只是使用其中一个。
答案 2 :(得分:52)
通用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);