Moq示例使用out和ref需要

时间:2010-06-15 08:28:54

标签: moq

我正在尝试针对实现输出参数的一些遗留方法构建测试。 你能举个例子来说明一下这个吗?

3 个答案:

答案 0 :(得分:20)

只需分配测试中的outref参数。

鉴于此界面:

public interface ILegacy
{
    bool Foo(out string bar);
}

您可以编写如下测试:

[TestMethod]
public void Test13()
{
    string bar = "ploeh";

    var legacyStub = new Mock<ILegacy>();
    legacyStub.Setup(l => l.Foo(out bar))
        .Returns(true);

    Assert.IsTrue(legacyStub.Object.Foo(out bar));
    Assert.AreEqual("ploeh", bar);
}

答案 1 :(得分:2)

https://github.com/moq/moq4/wiki/Quickstart顶部的第二个示例有什么问题吗?如果你不想去寻找这样的事情,你真的应该举例说明你想要做什么。

答案 2 :(得分:1)

顺便提一下,如果你想使用moq(当前)来模拟out参数,你也必须进行以下箍跳。假设您想要模拟返回另一个模拟对象的out参数,例如

var mockServiceA = new Mock<IMyService>();
var mockServiceOutput = new Mock<IMyServiceOutput>();

// This will not work...
mockServiceA.Setup(svc => svc.DoSomething(out mockServiceOutput.Object));

// To have this work you have to do the following
IMyServiceOutput castOutput = mockServiceOutput.Object;
mockServiceA.Setup(svc => svc.DoSomething(out castOutput));