Moq 中的输出参数赋值
问题:
Moq 能否用于为输出参数赋值?
答案:
是的,可以使用 Moq 3.0 及以上版本为输出参数赋值。方法如下:
针对输出参数:
<code class="language-csharp">public interface IService { void DoSomething(out string a); } [TestMethod] public void Test() { var service = new Mock<IService>(); string expectedValue = "value"; service.Setup(s => s.DoSomething(out expectedValue)); string actualValue; service.Object.DoSomething(out actualValue); Assert.AreEqual(expectedValue, actualValue); }</code>
Moq 在设置过程中记录分配给输出参数的值,并在测试期间返回该值。
针对引用参数:
Moq 目前不支持此功能。但是,您可以使用 Rhino Mocks,或者使用带约束的 Action 作为变通方法:
使用带约束的 Action:
<code class="language-csharp">public interface IService { void DoSomething(ref string a); } [TestMethod] public void Test() { var service = new Mock<IService>(); string value = "initial"; service.Setup(s => s.DoSomething(ref It.Ref<string>.IsAny)) .Callback<string>(s => s = "expectedValue"); service.Object.DoSomething(ref value); Assert.AreEqual("expectedValue", value); }</code>
在这里,我们使用 It.Ref<T>.IsAny
约束来匹配任何输入引用参数,并在回调中设置其值。
以上是Moq 可以为输出参数赋值吗?的详细内容。更多信息请关注PHP中文网其他相关文章!