使用 Moq 模拟 COM+ 包装器失败

本文关键字:失败 包装 COM+ Moq 模拟 使用 | 更新日期: 2023-09-27 17:56:06

我有一个用于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;
            });

但是对于返回中的"o"参数,我得到

The value passed to the method is never used because it is overwritten in the 
method body before being read

我错过了什么?

使用 Moq 模拟 COM+ 包装器失败

这是因为ref关键字。 请参阅这些问题。 第二个对此进行了一些尝试,尽管它们可能无法满足您的需求。

不能在 lambda 表达式中使用 ref 或 out 参数

在最小起订量中分配输出/引用参数

如果可以重构以避免使用ref,请执行此操作。 否则,手掷存根。

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