gpt4 book ai didi

moq - 使用 Moq 模拟 protected 泛型方法

转载 作者:行者123 更新时间:2023-12-04 02:19:31 30 4
gpt4 key购买 nike

在 Moq 中模拟 protected 虚拟(非通用)方法很容易:

public class MyClass
{
....
protected virtual int MyMethod(Data data){..}
}

并 mock 它:
myMock.Protected().Setup<int>("MyMethod", ItExpr.Is<Data>( ...

如果 protected 方法是通用的,我找不到使用相同技术的方法,例如:
protected virtual int MyMethod<T>(T data)

除了使用包装类来覆盖该方法之外,任何想法如何做到这一点都非常感谢。

最佳答案

我查了资料,好像是不支持使用 Moq 模拟 protected 泛型方法 :
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获取mock方法,但是 GetMethod (尽管 MSDN 声明不同)不要与泛型很好地相处,请参阅:

GetMethod for generic method

Get a generic method without using GetMethods

旁注:
在我看来, mock protected 成员是一种代码异味,无论如何,我宁愿通过重构我的设计来避免这种情况(除此之外,Moq 不支持它)。

关于moq - 使用 Moq 模拟 protected 泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9416291/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com