首頁 >後端開發 >C++ >Moq 可以為輸出參數賦值嗎?

Moq 可以為輸出參數賦值嗎?

DDD
DDD原創
2025-01-18 05:31:13739瀏覽

Can Moq Assign Values to Out Parameters?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn