c# - 使用 Moq 验证非虚拟方法
问题描述
我有这样的课:
public class MyClass
{
public async Task MethodA()
{
await DoSomething();
}
public Task MethodB()
{
return MethodA();
}
}
我需要测试 MethodB 调用 MethodA。
但我怎么能验证这一点?
我正在尝试这个:
var myClassMock = new Mock<MyClass>();
myClassMock.VerifyAll();
await myClassMock.Object.MethodB();
myClassMock.Verify(d => d.MethodA(), Times.Once);
并得到 NotSupportedException: Invalid verify on a non-virtual (overridable in VB) member: d => d.MethodA()。
我可以在不使用另一个模拟框架的情况下实际测试它吗?
解决方案
这无论如何都行不通,因为你调用MethodB()
你的模拟而不是真实的东西。您想模拟MethodA()
但使用MethodB()
. 这称为部分模拟。有关如何做到这一点,请参阅使用 moq 仅模拟一些方法。
推荐阅读
- python - 嵌套字典的问题
- javascript - 转置 JSON 对象
- reactjs - CRUD操作后如何更新React js中的Material表?
- shell - 如何使用 Jenkins 主动选择参数 groovy 脚本在远程服务器中执行 shell 脚本?
- javascript - 使用递归的边界填充像素到像素不起作用?
- r - 线性模型的字符串公式
- python - 如何调整seaborn中的x轴以正确显示日期?
- python - 在DataFrame中找到具有行空间范围的每一列的最大值
- reactjs - 如何使用 useState() 获取 textarea 数据
- python - 如何在树莓派 3 raspbian 上用 Python 启动进程?