gpt4 book ai didi

c# - 使用 Moq,我如何模拟带有 out 参数的 protected 方法?

转载 作者:太空狗 更新时间:2023-10-29 20:30:07 26 4
gpt4 key购买 nike

对于这样的方法:

protected virtual bool DoSomething(string str) { }

我通常通过以下方式来模拟它:

var mockModule = new Mock<MyClass> { CallBase = true };
mockModule.Protected().Setup<bool>("DoSomething", ItExpr.IsAny<string>()).Returns(true);

但是对于像这样的方法:

protected virtual bool DoSomething(out string str) { }

我如何模拟它?

最佳答案

从 moq 4.8.0-rc1 (2017-12-08) 开始就可以了。您可以使用 ItExpr.Ref<string>.IsAny用于匹配 ref 的任何值或 out参数。在你的情况下:

mockModule.Protected().Setup<bool>("DoSomething", ItExpr.Ref<string>.IsAny).Returns(true);

模拟 out 参数的完整示例:

[TestClass]
public class OutProtectedMockFixture
{
delegate void DoSomethingCallback(out string str);

[TestMethod]
public void test()
{
// Arrange
string str;
var classUnderTest = new Mock<SomeClass>();
classUnderTest.Protected().Setup<bool>("DoSomething", ItExpr.Ref<string>.IsAny)
.Callback(new DoSomethingCallback((out string stri) =>
{
stri = "test";
})).Returns(true);

// Act
var res = classUnderTest.Object.foo(out str);

// Assert
Assert.AreEqual("test", str);
Assert.IsTrue(res);
}
}

public class SomeClass
{
public bool foo(out string str)
{
return DoSomething(out str);
}

protected virtual bool DoSomething(out string str)
{
str = "boo";
return false;
}
}

关于c# - 使用 Moq,我如何模拟带有 out 参数的 protected 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37473996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com