3

我有这个测试

[Test]
public void SaveInventoryItemLoad_Will_Call_WCF_Service_SaveInventoryItemLoad()
{ 
    adapter.SaveInventoryItemLoad(new List<InventoryItemLoadProxy>());
    itemMasterBusinessClientMock.Verify(x => x.SaveInventoryItemLoad(It.IsAny<List<InventoryItemLoadProxy>>()), Times.Once());
}

很好,因为我在 WCF 端测试过该方法做了我想要的,所以我只需要说“嘿,你调用了服务吗?是的!”。现在虽然...我需要将所述列表分解为 10 个或更少的块,即 23 个项目的列表将是 10、10 和 3 个的三个列表。所以第一步当然是编写一个单元测试来验证我没有将十多个项目推送到 SaveInventoryItemLoad 方法。我当然可以验证该方法被调用了 X 次,但这不是我想要的。我想确保提供给该方法的列表 <= 10 但我似乎无法弄清楚如何。我控制了起订量快速入门,但不知道该怎么做。

我虽然这会以某种方式做到这一点

// Verify setter with an argument matcher
mock.VerifySet(foo => foo.Value = It.IsInRange(1, 5, Range.Inclusive));

但我似乎无法做到这一点。我想我以前从未遇到过这种情况。有人知道怎么做吗?

谢谢

4

2 回答 2

3

我没有使用 Moq,只有 Rhino.Mocks,但我认为您应该能够将原始代码从更改It.IsAny<List<InventoryItemLoadProxy>>为限制它不是任何列表,而是不超过 10 个项目的列表。

从网上快速浏览,语法可能类似于It.Is<List<InventoryItemLoadProxy>>(list => list.Count <= 10).

于 2012-06-14T18:09:08.200 回答
2

这是代码:

itemMasterBusinessClientMock.Verify(x => x.SaveInventoryItemLoad(It.Is<List<InventoryItemLoadProxy>>(l=>l.Count < 100)), Times.Once());

这里有几个例子

于 2012-06-14T18:09:43.410 回答