gpt4 book ai didi

moq - 如何使用 Moq 在 protected 方法上设置回调?

转载 作者:行者123 更新时间:2023-12-04 16:24:34 25 4
gpt4 key购买 nike

我无法使用 Moq (v.4.2) 在 protected 方法上设置回调。

代码如下所示:

public abstract class AbstractClass
{
protected abstract void OneProtectedMethod();
}

public class OneClass : AbstractClass
{
protected override void OneProtectedMethod()
{
Console.WriteLine("Hello");
}

public void DoMethod()
{
OneProtectedMethod();
}
}

[Test]
public void should_call_protected_method()
{
var mock = new Mock<OneClass>();

mock.Protected().Setup("OneProtectedMethod").Callback(() => Console.WriteLine("Goodbye"));

var o = new OneClass();

o.DoMethod();

mock.Protected().Verify("OneProtectedMethod", Times.Once());
}

我在这里做错了什么吗?

谢谢。

最佳答案

您对 protected 方法的设置运行良好,但它需要以某种方式与被测类相关。想象一个像下面这样的类。它依赖于 OneClass并且可以在单元测试中模拟这种依赖关系。

public class Master
{
// Master hes dependency on OneClass
private readonly OneClass _dependency;

public Master(OneClass dependency)
{
_dependency = dependency;
}

public bool DoSomething()
{
// ... some code
// dependency is used here
_dependency.DoMethod();
// ... some code

return true;
}
}

然后测试可能如下所示。
[TestMethod]
public void DoSomething_WhenCalled_ReturnsTrue()
{
// Arrange
var mock = new Mock<OneClass>();
mock.Protected().Setup("OneProtectedMethod").Callback(() => Debug.WriteLine("Goodbye"));
var master = new Master(mock.Object);

// Act
master.DoSomething();

// Assert
// ...
}

这里是 OneProtectedMethod 的模拟版本方法将被使用。所以在输出中只有文本 Goodbye将被写入,真正的实现将被 mock 。哈。

关于moq - 如何使用 Moq 在 protected 方法上设置回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33825143/

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