使用Moq测试抽象类

Gue*_*lla 12 c# testing nunit unit-testing moq

我正在尝试对抽象类中的方法运行单元测试.我浓缩了下面的代码:

抽象类:

public abstract class TestAb
{
    public void Print()
    {
        Console.WriteLine("method has been called");
    }
}
Run Code Online (Sandbox Code Playgroud)

测试:

[Test]
void Test()
{
    var mock = new Mock<TestAb>();
    mock.CallBase = true;
    var ta = mock.Object;
    ta.Print();
    mock.Verify(m => m.Print());
}
Run Code Online (Sandbox Code Playgroud)

信息:

Method is not public
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?我的目标是使用Moq框架测试抽象类中的方法.

Ada*_*hah 15

该消息是因为您的Test方法不公开.测试方法需要公开.即使在公开测试方法之后,它也会失败,因为您只能验证抽象/虚拟方法.因此,在您的情况下,您必须将方法设置为虚拟,因为您已实现.


Ada*_*kis 6

如果你想在这样的抽象类上模拟方法,那么你需要使它成为虚拟的或抽象的。