模拟Moq中受测试对象的方法?

我想测试我的类的方法A,但是没有调用通常由A调用的实际方法B.那是因为B有很多外部交互,我现在不想测试。

我可以为B调用的所有服务创建模拟,但这是相当有用的。 我宁愿只是模拟B并让它返回样本数据。

这可能与Moq框架有关吗?

这是一个抓住! 您必须确保方法B是虚拟的并且可以覆盖。

然后,设置模拟以在未提供设置时调用基本方法。 然后设置B ,但不设置A 由于A未设置,因此将调用实际实现。

 var myClassMock = new Mock(); myClassMock.Setup(x => xB()); //mock B myClassMock.CallBase = true; MyClass obj = myClassMock.Object; obj.A(); // will call the actual implementation obj.B(); // will call the mock implementation 

在幕后,Moq将动态创建一个扩展MyClass并覆盖B