设置方法以返回作为参数传递的函数的返回值

时间:2018-12-12 20:35:18

标签: c# moq

我有:

public T MethodNameHere<T>(Func<T> func)
{
  return func.Invoke();
}

如何为该方法设置模拟。类似于:

this.mockService.Setup(a => a.MethodNameHere(It.IsAny<Func<Guid>>())).Returns(...?...);

无论Returns返回了什么,我如何Func

1 个答案:

答案 0 :(得分:3)

Returns委托中获取传递的参数,然后调用该参数

this.mockService
    .Setup(_ => _.MethodNameHere(It.IsAny<Func<Guid>>()))
    .Returns((Func<Guid> func) => func());

this.mockService
    .Setup(_ => _.MethodNameHere(It.IsAny<Func<Guid>>()))
    .Returns((Func<Guid> func) => func.Invoke());

引用Moq Quickstart

// access invocation arguments when returning a value
mock.Setup(x => x.DoSomethingStringy(It.IsAny<string>()))
        .Returns((string s) => s.ToLower());
// Multiple parameters overloads available