2017-01-07 2 views
-1

Я использую Moq для своих модульных тестов. У меня есть этот интерфейс:Исключение в методе установки в Moq Mock calss

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) 

Я проверил, что количество аргументов соответствует, но я не уверен, почему я получаю это исключение.

спасибо.

+0

Помимо того, что по умолчанию ARG2 должна быть строка («» или нуль), а не (0). Я неспособен повторить вашу проблему, поскольку все остальное похоже на то, как должно. пожалуйста, предоставьте [mcve], который воспроизводит проблему, чтобы можно было предоставить более качественные ответы. – Nkosi

ответ

1

Вы не указали оператор возврата на ваш setup.

Изменить код:

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

Это позволит решить вашу проблему

Смежные вопросы