首页 文章

返回传递给方法的值

提问于
浏览
281

我在接口上有一个方法:

string DoSomething(string whatever);

我想用MOQ模拟这个,以便它返回传入的内容 - 类似于:

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

有任何想法吗?

3 回答

  • 168

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

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

    或者稍微更具可读性:

    .Returns<string>(x => x);
    
  • 45

    更有用的是,如果你有多个参数,你可以访问任何/所有参数:

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

    您始终需要引用所有参数,以匹配方法的签名,即使您只是使用其中一个 .

  • 376

    通用 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);
    

相关问题