我想测试我的类的方法A,但是没有调用通常由A调用的实际方法B.那是因为B有很多外部交互,我现在不想测试。
我可以为B调用的所有服务创建模拟,但这是相当有用的。我宁愿只是模拟B并让它返回样本数据。
这可能与Moq框架有关吗?
答案 0 :(得分:35)
是的,抓住了!
您必须确保方法B
是虚拟的,并且可以覆盖。
然后,设置mock以在没有提供设置时调用基本方法。然后设置B
,但不设置A
。由于未设置A
,因此将调用实际实现。
var myClassMock = new Mock<MyClass>();
myClassMock.Setup(x => x.B()); //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
的类。