我正在尝试对一些实现输出参数的遗留方法进行测试。 你能给我一个如何做到这一点的例子吗?
我正在尝试对一些实现输出参数的遗留方法进行测试。 你能给我一个如何做到这一点的例子吗?
直接将测试中的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);
}
顺便提一下,如果你想使用moq(目前)来模拟输出参数,你还需要进行以下跳跃。假设你想模拟一个返回另一个模拟对象的输出参数,例如。
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));