21
我想测试我的类的方法A,但不调用通常由A调用的实际方法B.这是因为B有很多外部交互,我现在不想测试。模拟Moq中正在测试的主题的方法?
我可以为B所调用的所有服务创建嘲笑,但这是相当的工作。我宁愿嘲笑B,让它返回样本数据。
Moq框架有可能吗?
我想测试我的类的方法A,但不调用通常由A调用的实际方法B.这是因为B有很多外部交互,我现在不想测试。模拟Moq中正在测试的主题的方法?
我可以为B所调用的所有服务创建嘲笑,但这是相当的工作。我宁愿嘲笑B,让它返回样本数据。
Moq框架有可能吗?
这是,赶上! 您必须确保方法B
是虚拟的并且可以被重写。
然后,设置模拟以在不提供设置时调用基本方法。然后您设置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
屁股的场面,起订量,动态地创建一个扩展MyClass
和覆盖B
类。
准确地说,如果'virtual'方法'B'是'protected internal'或'public',它将会是最简单的。 –
问题:CallBase = true是什么;做? – Hace
@Hace如果我没有记错,它会告诉模拟对象调用'MyClass'中定义的方法,除非提供了明确的设置。如果你没有调用'CallBase = true',那么无论是否提供了明确的设置,Moq都会调用虚拟方法的虚拟实现。 – dcastro