c# - 预期在 mock 上调用一次,但为 0 次 With Moq

标签 c# unit-testing moq

我遇到了一个错误

Invocation on the mock once, but was 0 times

下面是我的代码结构

public class GenerateAddress : IGenerateAddress 
{
    public GenerateAddress(IAddress createAdd, IValidate validate) {
       //constructor 
    }

    public Address GetAddressFromA(string name){..}
}

public class SaveAddress : ISaveAddress 
{
    public SaveAddress(IGenerateAddress generateaddress) {
        //constructor 
    }

    public bool Save(string name)
    {
        var address = generateaddress.GetAddressFromA(name);
        ......
        //Rest of the code to save 
    }
}

测试类 SaveAddress 的测试方法

public void TestVerifyGetAddressIsCalled()
{
    var mockIAddress = new Mock<IAddress>();
    var mockValidate = new Mock<IValidate>();

    var genAddress = new Mock<IGenerateAddress>();

    var objGenAdress = new GenerateAddress(mockIAddress.Object, mockValidate.Object) // 

    var objSaveAddress = new SaveAddress(objGenAdress);

    objSaveAddress.Save("dddd");

    //Verify if IGenerateAddress 'GenerateAddress' is called

    genAddress.Verify(a=>a.GenerateAddress("ddddd"),Times.Once); // Throws Excepted Invocation 
}

我需要验证 GenerateAddress 是否被调用。我还执行了 Setup 并将值分配给 Address 对象,但即使这些值也没有设置......不知道出了什么问题。

最佳答案

您正在使用手动创建的 IGenerateAddress (objGenAdress) 和 SaveAddress 而不是模拟的 genAddress

另外考虑到 SUT 是 SaveAddress,它只需要 IGenerateAddress,不需要其他模拟。

public void TestVerifyGetAddressIsCalled() { 
    //Arrange
    var genAddress = new Mock<IGenerateAddress>();

    var objSaveAddress = new SaveAddress(genAddress.Object);

    var name = "dddd";

    //Act
    objSaveAddress.Save(name);

    //Assert
    //Verify if 'IGenerateAddress.GenerateAddress' is called    
    genAddress.Verify(a => a.GenerateAddress(name), Times.Once);
}

关于c# - 预期在 mock 上调用一次,但为 0 次 With Moq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36773399/

相关文章:

c# - 我的 HtmlHelper 正在丢失 Html 编码

C# 继承保护方法实现接口(interface)

php - Laravel 按需测试通知

Python:如何模拟 SQLAlchemy 事件处理程序(使用 mock.unittest)

asp.net-mvc - 在 ASP.NET MVC 测试项目中模拟静态方法

c# - 在 Global.asax 中验证 HTTP 请求和返回特定 HTTP 响应的正确方法是什么?

c# - 如何检查 cookie 在 asp.net 中是否启用或禁用?

java - 以恒定单位添加日期之间的差异

mocking - 此测试是否正确使用了AutoFixture和Moq?

c# - 在 C# 中模拟 StreamReader 以进行单元测试