【问题标题】:Moq Example using out and ref needed起订量示例使用 out 和 ref 需要
【发布时间】:2010-06-15 08:28:53
【问题描述】:

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

【问题讨论】:

  • 你需要澄清你在做什么,以及为什么它不能按预期工作。仅“无参数的起订量”是不够的 - 首先,您为什么需要起订量?请显示一些代码。
  • 还好。环境复杂,我得补一下。我只是想知道某处是否有完整的sn-p。仅此而已。我会把一些东西放在一起并发布

标签: moq


【解决方案1】:

只需从测试中分配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);
}

【讨论】:

  • 太棒了。这就是我所需要的。只是让我前进的东西。一件事虽然你没有使用“It.IsAny”的东西 EG (Foo(out it.IsAny));我认为这是某种必需的。你能澄清一下我将不胜感激。谢谢
  • 《快速入门》中也有很多 It.Is*... - 我建议定期阅读相同的内容 - 您将无法一次性消化它(如果您做错了事)需要在一个测试套件中全部完成!)
  • @devnet247:这怎么不值得你给 +1 呢?这表明对 Mark 的时间不尊重? (有人也给了 Q 一个 +1 - 我认为它是 Mark - 我有一个 -1 来反驳它,因为没有完成作业)。为这个答案 +1。
  • 嗨鲁本。我已经标记了 2,这是我似乎被允许做的最大值我还没有看过 1 的标志。
  • 这确实可以清楚地说明 ref 和 out 的差异,因为它们与 Moq 完全不同。这个问题是针对的,但我不希望有人以同样的方式解释 ref。
【解决方案2】:

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

【讨论】:

  • 我同意。我很抱歉。我真的不知道从哪里开始,因为实际的“真实代码”有点复杂,无法发布。我应该自己建立一个点头示例。经验教训
【解决方案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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-06
    • 2020-09-23
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    相关资源
    最近更新 更多