Я проверил источник, и, похоже, защищенные от мошенничества обобщенные методы с Moq не поддерживаются :
Метод Protected()
создает экземпляр класса ProtectedMock<T>
, который использует следующий метод для получения метода, который вы хотите смоделировать:
private static MethodInfo GetMethod(string methodName, params object[] args)
{
return typeof(T).GetMethod(
methodName,
BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public,
null,
ToArgTypes(args),
null);
}
Он использует Type.GetMethod , чтобы получить метод для насмешки, но GetMethod
(хотя MSDN по-разному) не очень хорошо работает с дженериками, см .:
GetMethod для универсального метода
Получить универсальный метод без использования GetMethods
Примечание:
По моему мнению, издевательство над защищенным членом - это запах кода, и я бы все равно попытался избежать этого, если бы я подверг рефакторингу мой дизайн (кроме того, что он не поддерживается в Moq).