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中文網其他相關文章!