我只想嘲笑GetValue
以下类的方法,使用 Moq:
public class MyClass
{
public virtual void MyMethod()
{
int value = GetValue();
Console.WriteLine("ORIGINAL MyMethod: " + value);
}
internal virtual int GetValue()
{
Console.WriteLine("ORIGINAL GetValue");
return 10;
}
}
我已经读过一些如何与 Moq 配合使用的内容。我在网上找到的解决方案是使用CallBase
财产,但这对我不起作用。
这是我的测试:
[Test]
public void TestMyClass()
{
var my = new Mock<MyClass> { CallBase = true };
my.Setup(mock => mock.GetValue()).Callback(() => Console.WriteLine("MOCKED GetValue")).Returns(999);
my.Object.MyMethod();
my.VerifyAll();
}
我希望 Moq 使用现有的实现MyMethod
并调用模拟方法,产生以下输出:
ORIGINAL MyMethod: 999
MOCKED GetValue
但这就是我得到的:
ORIGINAL GetValue
ORIGINAL MyMethod: 10
and then
Moq.MockVerificationException : The following setups were not matched: MyClass mock => mock.GetValue()
我有一种感觉,我完全误解了一些事情。我在这里缺少什么?
任何帮助,将不胜感激
好的,我在另一个问题中找到了答案:如何模拟类的内部方法? https://stackoverflow.com/questions/2772621/how-to-mock-the-internal-method-of-a-class。所以这是重复的并且可以关闭。
尽管如此,解决方案如下:
只需将此行添加到Assembly.config
您要测试的项目的名称:
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] // namespace in Moq
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)