C# 模拟COM+;使用最小起订量的包装器失败了

C# 模拟COM+;使用最小起订量的包装器失败了,c#,unit-testing,lambda,moq,C#,Unit Testing,Lambda,Moq,我有一个COM+接口的包装器类,我需要模拟它 这是套接字接口上该方法的签名 int MakeRequest(object ServiceId, object Host, object Port, object Request, ref object pResponse); 我用Moq来模拟它,就像这样 object pResponse = String.Empty; var socket = new Mock<Socket>(); socket.Se

我有一个COM+接口的包装器类,我需要模拟它

这是套接字接口上该方法的签名

int MakeRequest(object ServiceId, object Host, object Port,
                object Request, ref object pResponse);
我用Moq来模拟它,就像这样

object pResponse = String.Empty;
var socket = new Mock<Socket>();
socket.Setup(x => x.MakeRequest(It.IsAny<int>(), It.IsAny<string>(), 
                                It.IsAny<int>(), It.IsAny<string>(),
                                ref pResponse))
            .Returns((int i, string s, int ii, string ss, object o) => 
            { 
                o = "Response";
                return 0;
            });

我遗漏了什么?

这是因为
ref
关键字。看看这些问题。第二个有一些尝试,虽然他们可能不满足你的需要

如果您可以重构以避免使用
ref
,请这样做。否则,用手卷起一根短棒

public class StubSocket
{
    int MakeRequest(object ServiceId, object Host, object Port, object Request, ref object pResponse)
    {
        pResonse = "Response";
        return 0;
    }
}

重构是唯一的出路
public class StubSocket
{
    int MakeRequest(object ServiceId, object Host, object Port, object Request, ref object pResponse)
    {
        pResonse = "Response";
        return 0;
    }
}