首页 > 解决方案 > 使用 Moq 验证非虚拟方法

问题描述

我有这样的课:

public class MyClass
{
    public async Task MethodA()
    {
        await DoSomething();
    }

    public Task MethodB()
    {
        return MethodA();
    }
}

我需要测试 MethodB 调用 MethodA。

但我怎么能验证这一点?

我正在尝试这个:

var myClassMock = new Mock<MyClass>();
myClassMock.VerifyAll();
await myClassMock.Object.MethodB();

myClassMock.Verify(d => d.MethodA(), Times.Once);

并得到 NotSupportedException: Invalid verify on a non-virtual (overridable in VB) member: d => d.MethodA()。

我可以在不使用另一个模拟框架的情况下实际测试它吗?

标签: c#.netunit-testingmockingmoq

解决方案


这无论如何都行不通,因为你调用MethodB()你的模拟而不是真实的东西。您想模拟MethodA()但使用MethodB(). 这称为部分模拟。有关如何做到这一点,请参阅使用 moq 仅模拟一些方法。


推荐阅读