c# - Moq.MockException:对模拟的预期调用恰好 1 次,但为 0 次:x => x.Init()
问题描述
我有这个方法来验证是否调用了一个方法。我在 C# 中使用 xUnit 和 MOQ。
[Fact]
public void VerifyIfInitCalled()
{
// Arrange
var mock = new Mock<ICal>();
var cal = new Cal(mock.Object);
// Act
cal.Init();
// Assert
mock.Verify(x => x.Init(), Times.Exactly(1));
}
对于我的 Cal 课
public class Cal : ICal
{
private ICal _cal;
public Cal(ICal cal)
{
_cal = cal;
}
public void Init()
{
Console.WriteLine("Init called"); ;
}
}
Moq.MockException :
Expected invocation on the mock exactly 1 times, but was 0 times: x => x.Init()
但是,我运行单元测试,尽管我调用了该Init()
方法,但它失败并出现错误。
解决方案
您需要修改您Init()
以使您的断言正确
public void Init()
{
_cal.Init();
Console.WriteLine("Init called"); ;
}
并且您的界面ICal
需要有一个Init()
成员。
但显然你有一个概念问题,你正在实现ICal
并将它传递给类构造函数!!。
更新
单元测试特定于实现,因此您的测试方法需要测试Cal
类。
如果您的类调用其他服务并且您需要模拟和设置方法调用以获得您将使用的特定结果moq
推荐阅读
- mql4 - 为什么要在 mql4 中使用数组函数
- android - 使用 chrome 开发工具调试发布 apk
- datetime - 在画面中,如何计算两个日期之间的登录时间?
- ios - 在 iOS 中不显示附近的投射设备选择屏幕
- vbscript - 使用 VBScript 静默运行 EXE
- python - Tensorflow 2.0 未使用所有 CPU 内核
- swift - 如何仅为类类型提供 subsript 的默认协议一致性?
- python-3.x - SharePoint 在线 REST API:发布有效负载以使用多选字段创建新项目
- ios - 如何使用firebase在xcode中验证电子邮件和密码
- r - 根据数据框列表中的一列过滤行