Я знаю, что это старый пост, но я подумал, что этот код может помочь другим, имеющим эту проблему с более старой версией Moq. Вот пример с 5 и 6 аргументами, и он может быть расширен для поддержки любого числа.
Я проверил это с версией 3.1.0.0, но она должна работать и с другими версиями.
Секрет в использовании отражения для доступа к защищенному методу SetCallbackWithArguments в базовом классе ...
Надеюсь, это кому-нибудь пригодится!
public delegate void Action<T1, T2, T3, T4, T5>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5);
public delegate void Action<T1, T2, T3, T4, T5, T6>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6);
public static class MoqExtensions
{
public static ICallbackResult Callback<T1, T2, T3, T4, T5>(this ICallback call, Action<T1, T2, T3, T4, T5> callback)
{
call.SetCallbackWithArguments(callback);
return (ICallbackResult)call;
}
public static ICallbackResult Callback<T1, T2, T3, T4, T5, T6>(this ICallback call, Action<T1, T2, T3, T4, T5, T6> callback)
{
call.SetCallbackWithArguments(callback);
return (ICallbackResult)call;
}
public static void SetCallbackWithArguments(this ICallback call, Delegate callback)
{
MethodInfo methodInfo = call.GetType().GetMethod("SetCallbackWithArguments", BindingFlags.NonPublic | BindingFlags.Instance);
methodInfo.Invoke(call, new object[] { callback });
}
}