Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Moq中模拟虚拟成员_C#_Moq - Fatal编程技术网

C# 在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

对于单元测试,我使用NUnit2.6和MOQ4.0。有一个关于虚拟成员的特殊情况,其中Moq的代理对象不将方法调用中继到实际实现(可能是通过设计)。例如,如果我有一门课

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
设置永远不会起作用。最好在回答时加入一些对代码的解释。