模拟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
。