最小起订量示例使用 out 和 ref 需要

Moq Example using out and ref needed

提问人:user9969 提问时间:6/15/2010 最后编辑:Ruben Bartelinkuser9969 更新时间:4/11/2018 访问量:8116

问:

我正在尝试针对一些实现参数的旧方法构建测试。 你能给我举个例子吗?

最小起订量

评论

2赞 Tomas Aschan 6/15/2010
你需要澄清你在做什么,以及为什么它没有按预期工作。仅仅“带参数的最小起订量”是不够的 - 首先,为什么需要最小起订量?请显示一些代码。
0赞 user9969 6/15/2010
很公平。我必须编造一些东西,因为环境很复杂。我只是想知道某处是否有一个完整的片段。就这样。我会把一些东西放在一起并发布

答:

24赞 Mark Seemann 6/15/2010 #1

只需从测试中分配 or 参数即可。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);
}

评论

0赞 user9969 6/15/2010
匪夷所思。这就是我所需要的.只是让我继续前进的东西。有一件事,虽然你没有使用“It.IsAny”的东西,EG(Foo(out it.IsAny<Bar>));我认为这是某种必需的。你能澄清一下我会很感激的吗。
0赞 Ruben Bartelink 6/15/2010
快速入门中也有很多 It.Is*...... - 我建议定期阅读 - 您将无法一次性消化它(如果您需要在单个测试套件中完成所有操作,那么您做错了什么!
1赞 Ruben Bartelink 6/15/2010
@devnet247:这怎么不值得你打+1——它对马克的时间几乎没有尊重?(有人也给 Q 打了 +1 - 我假设是 Mark - 我给它打了 -1 来反驳它,因为没有做功课)。+1 这个答案。
0赞 user9969 6/15/2010
嗨,鲁本,我已经标记了 2,这是我似乎被允许做的最大值,我还没有看过 1 号。
0赞 Morgeth888 4/21/2017
这确实可以清楚地了解 ref 和 out 的差异,因为它们与 Moq 完全不同。问题是针对的,但我讨厌有人以同样的方式解释 ref。
2赞 Ruben Bartelink 6/15/2010 #2

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

评论

0赞 user9969 6/15/2010
我同意。我道歉。我真的不知道从哪里开始,因为实际的“真实代码”有点复杂,无法发布。我应该自己建立一个点头的例子。经验教训
1赞 The Senator 3/5/2014 #3

顺便说一句,如果你也想使用 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));