【问题标题】:MOQ Unit testing error. Expected invocation on the mock once, but was 0 timesMOQ 单元测试错误。预期在模拟上调用一次,但为 0 次
【发布时间】:2019-12-09 16:01:00
【问题描述】:

我知道这个问题以前在这里被问过,但我很困惑为什么这个测试失败了。这是我正在运行的测试:

    public void SubmitWebservicePurchaseOrder_Calls_addQuickAddItemListToPO()
    {
        var input = new PurchaseOrderWebserviceSubmitDTO();
        _service.SubmitWebservicePurchaseOrder(input);

        var dict = It.IsAny<Dictionary<long, QuickAddOrCSVLineItem>>();
        _purchaseOrderMock.Verify(x => x.addQuickAddItemListToPO(It.IsAny<long>(), It.Is<bool>(y => y == false), ref dict), Times.Once);
    }

这是错误的内容:

Result Message: 
Moq.MockException : 
Expected invocation on the mock once, but was 0 times: x => x.addQuickAddItemListToPO(It.IsAny<Int64>(), It.Is<Boolean>(y => y == False), .dict)
No setups configured.

Performed invocations:
IPurchaseOrders.CreateNewPO(OMS.DataLayer.poHeader)
IPurchaseOrders.addQuickAddItemListToPO(0, False, System.Collections.Generic.Dictionary`2[System.Int64,OMS.DataServices.QuickAddOrCSVLineItem])
IPurchaseOrders.GetPOHeaderInfoWithUserToken(0, 00000000, 00000000)

函数SubmitWebservicePurchaseOrder 肯定在调用addQuickAddItemListToPO,但我仍然收到此错误...有人知道为什么吗?我之前没有用 MOQ 做太多工作,也不确定如何调试...

【问题讨论】:

  • 你能发一个minimal reproducible example吗?
  • 向我们展示您尝试设置模型的代码,因为这表明没有提供设置。您应该首先针对接口创建一个新的模拟对象。然后你设置任何输入值。
  • 需要查看您的模拟设置和被测代码,否则我们无法为您提供比错误消息更多的信息。

标签: c# .net moq


【解决方案1】:

验证检查是否调用了模拟函数,Moq 函数需要设置为被调用的测试。 您似乎正在尝试测试是否正在调用 X 上已实现的函数。

【讨论】:

    【解决方案2】:

    找出问题所在,addQuickAddItemListToPO 上的 ref 参数未正确传入/被读取为 null。一旦我更新了我的 MOQ 库并将参数更改为ref It.Ref&lt;Dictionary&lt;long, QuickAddOrCSVLineItem&gt;&gt;.IsAny,测试就通过了。

    很抱歉没有发布更多代码家伙,我认为我发布的内容足以让那里的人提供帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      相关资源
      最近更新 更多