-->

类的部分嘲讽与起订量(Partial mocking of class with Moq)

2019-07-29 22:05发布

我想嘲笑只GetValue以下类的方法,使用起订量:

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;
    }
}

我已经读了一下这个应该怎么用起订量工作。 我在网上找到的解决方案是使用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();
 }

我预计起订量使用现有实施MyMethod并调用模拟的方法,导致下面的输出:

ORIGINAL MyMethod: 999
MOCKED GetValue

但是这就是我得到:

ORIGINAL GetValue
ORIGINAL MyMethod: 10

然后

Moq.MockVerificationException : The following setups were not matched: MyClass mock => mock.GetValue()

我的感觉,我完全误解的东西。 我缺少的是在这里吗? 任何帮助,将不胜感激

Answer 1:

好吧,我发现了另外一个问题的答案是: 如何嘲笑类的内部方法? 。 所以这是一个重复的,可以关闭。

然而,这里的解决方案:只需添加这行来Assembly.config要测试项目:

[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] // namespace in Moq


Answer 2:

你有没有尝试指定可验证:

my.Setup(mock => mock.GetValue()).Callback(() => Console.WriteLine("MOCKED GetValue")).Returns(999).Verifiable();


文章来源: Partial mocking of class with Moq