Moq.MockException:预期对 mock 的调用正好是 1 次,但实际是 0 次:x => x.Init()
Moq.MockException: Expected invocation on the mock exactly 1 times, but was 0 times: 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));
}
还有我的卡尔 class
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
并将其传递给 class 构造函数时遇到了概念问题!!
更新
单元测试特定于实现,因此您的测试方法需要测试 Cal
class。
如果您的 class 调用其他服务并且您需要模拟和设置方法调用以获得特定结果,您将使用 moq
我有这个方法来验证是否调用了一个方法。我在 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));
}
还有我的卡尔 class
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
并将其传递给 class 构造函数时遇到了概念问题!!
更新
单元测试特定于实现,因此您的测试方法需要测试 Cal
class。
如果您的 class 调用其他服务并且您需要模拟和设置方法调用以获得特定结果,您将使用 moq