Moq Mock calss中的Setup方法中的异常

时间:2017-01-07 01:17:50

标签: c# .net unit-testing mocking moq

我正在使用Moq进行单元测试。我有这个界面:

public interface IMyInterface
{
    Task<AClass> MyMethod(int arg1, string arg2=0, int arg3=1, bool arg4=false);
}

在我的单元测试代码中,我有

var mockInterface = new Mock<IMyInterface>();
mockInterface.Setup(w => w.MyMethod(It.IsAny<int>(), It.IsAny<string>(),
                                    It.IsAny<int>(), It.IsAny<bool>()))

我的单元测试代码编译,但是当我运行它时,我得到一个异常说

System.AggregateException: One or more errors occurred. ---> System.Reflection.TargetParameterCountException: Parameter count mismatch.
   at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Delegate.DynamicInvokeImpl(Object[] args)
   at Moq.Extensions.InvokePreserveStack(Delegate del, Object[] args)
   at Moq.MethodCallReturn`2.Execute(ICallContext call)
   at Moq.Interceptor.Intercept(ICallContext invocation)

我已经检查过参数计数是否匹配,但我不确定为什么我会收到此异常。

谢谢。

1 个答案:

答案 0 :(得分:1)

您没有为setup指定退货声明。

将您的代码更改为:

mockInterface.Setup(w => w.MyMethod(It.IsAny<int>(), It.IsAny<string>(), 
                                    It.IsAny<int>(), It.IsAny<bool>()))
             .ReturnsAsync(new AClass());

这将解决您的问题