【问题标题】:Mocking a COM+ wrapper with Moq is failing使用 Moq 模拟 COM+ 包装器失败
【发布时间】:2013-01-25 14:42:56
【问题描述】:

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

这是该方法在 Socket 接口上的签名

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;
            });

但是对于 Returns 中的 'o' 参数,我得到了

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

我错过了什么?

【问题讨论】:

    标签: c# unit-testing lambda moq


    【解决方案1】:

    这是因为ref 关键字。看到这些问题。第二个在这方面做了一些尝试,尽管它们可能无法满足您的需求。

    Cannot use ref or out parameter in lambda expressions

    Assigning out/ref parameters in Moq

    如果您可以重构以避免使用ref,请这样做。否则,请手动滚动存根。

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

    【讨论】:

    • 重构是唯一的出路
    猜你喜欢
    • 2011-07-03
    • 2020-05-15
    • 2019-07-07
    • 2011-06-17
    • 2016-01-02
    • 2014-11-30
    • 2012-10-07
    • 2010-12-22
    相关资源
    最近更新 更多