C# 在Moq中模拟虚拟成员
对于单元测试,我使用NUnit2.6和MOQ4.0。有一个关于虚拟成员的特殊情况,其中Moq的代理对象不将方法调用中继到实际实现(可能是通过设计)。例如,如果我有一门课C# 在Moq中模拟虚拟成员,c#,moq,C#,Moq,对于单元测试,我使用NUnit2.6和MOQ4.0。有一个关于虚拟成员的特殊情况,其中Moq的代理对象不将方法调用中继到实际实现(可能是通过设计)。例如,如果我有一门课 public class MyClass { protected virtual void A() { /* ... */ } protected virtual void B(...) { /* ... */ } } …我使用Moq覆盖测试夹具中的GetSom
public class MyClass {
protected virtual void A() {
/* ... */
}
protected virtual void B(...) {
/* ... */
}
}
…我使用Moq覆盖测试夹具中的GetSomethingElse
的A()
方法
var mock = new Mock<MyClass>();
mock.Protected().Setup("A").Callback(SomeSortOfCallback);
var mock=new mock();
mock.Protected();
…使用mock的A
方法工作得非常出色;但是,如果所述方法中的任何内容将调用非模拟方法B
,则该方法将不执行任何操作和/或返回默认值,即使MyClass
中存在实际实现
有办法解决这个问题吗?我用最小起订量错了吗
提前感谢,Manny设置
mock.CallBase=true
,您应该可以开始了。var systemUnderTest=new Moq.mock{CallBase=true};
var systemUnderTest = new Moq.Mock<ProcessBulkData> { CallBase = true };
systemUnderTest.Setup(s => s.MethodName(...)).Returns(...);
var actual=systemUnderTest.Object.BulkInsert(...);
Setup(s=>s.MethodName(…)。返回(…);
var-actual=systemUnderTest.Object.BulkInsert(…);
如果你还想模仿其他方法怎么办?@LouisRhys非常确定这不会影响它-如果你明确地模仿某个东西,CallBase
设置永远不会起作用。最好在回答时加入一些对代码的解释。