最小起订量单元测试错误。预期对模拟调用一次,但为 0 次

MOQ Unit testing error. Expected invocation on the mock once, but was 0 times

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

    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,也不确定如何调试...

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

解决了问题,addQuickAddItemListToPO 上的 ref 参数未在 correctly/was 中传递并被读取为 null。一旦我更新了我的最小起订量库并将参数更改为 ref It.Ref<Dictionary<long, QuickAddOrCSVLineItem>>.IsAny,测试就通过了。

很抱歉没有发布更多的代码家伙,我想我发布的内容足以让外面的人提供帮助。