如何对插入方法的列表小于100进行单元测试

时间:2012-06-14 18:03:17

标签: c# unit-testing moq

我有这个测试

[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或更少的chucks,即23个项目的列表将是10个,10个然后是3个的三个列表。因此,第一步当然是编写一个单元测试来验证我没有将超过十个项目推送到SaveInventoryItemLoad方法。我当然可以验证该方法被称为X次,但这不是我想要的。我想确保提供给方法的列表是&lt; = 10但我似乎无法弄清楚如何。我拖着moq快速启动但是看不出我会怎么做。

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

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

但我似乎无法做那项工作。我想我以前从来没有碰到这个。有人知道怎么做吗?

由于

2 个答案:

答案 0 :(得分:3)

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

通过在线快速查看,语法可能类似于It.Is<List<InventoryItemLoadProxy>>(list => list.Count <= 10)

答案 1 :(得分:2)

以下是代码:

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

这里有一些examples