首页 > 解决方案 > 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()方法,但它失败并出现错误。

标签: c#moqxunit

解决方案


您需要修改您Init()以使您的断言正确

public void Init()
{
    _cal.Init();
    Console.WriteLine("Init called"); ;
}

并且您的界面ICal需要有一个Init()成员。

但显然你有一个概念问题,你正在实现ICal并将它传递给类构造函数!!。

更新

单元测试特定于实现,因此您的测试方法需要测试Cal类。

如果您的类调用其他服务并且您需要模拟和设置方法调用以获得您将使用的特定结果moq


推荐阅读