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