提问人:user9969 提问时间:6/15/2010 最后编辑:Ruben Bartelinkuser9969 更新时间:4/11/2018 访问量:8116
最小起订量示例使用 out 和 ref 需要
Moq Example using out and ref needed
答:
24赞
Mark Seemann
6/15/2010
#1
只需从测试中分配 or 参数即可。out
ref
给定此接口:
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));
评论