使用Moq测试抽象类

我正在尝试对抽象类中的方法运行unit testing。 我浓缩了下面的代码:

抽象类:

public abstract class TestAb { public void Print() { Console.WriteLine("method has been called"); } } 

测试:

 [Test] void Test() { var mock = new Mock(); mock.CallBase = true; var ta = mock.Object; ta.Print(); mock.Verify(m => m.Print()); } 

信息:

 Method is not public 

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

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

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