使用moq

时间:2016-08-24 16:41:55

标签: c# unit-testing moq

我有一些存储库,我有一个方法,我想测试哪个在循环中调用参数作为数组。此方法一次从数组中取值100个项目。所以如果我有一个434项的数组方法应该调用5次。

那么,如果我可以测试这种方法怎么样呢?我需要验证这个方法被调用5次,并作为参数数组传递434项?

var items = GetListOfStrings(434); // return list with 434 items

context.Mock<ISomeRepository>()
            .Verify(method => method.GetSomeItems(It.IsAny<string[]>(), Times.Exactly(5)));

现在我作为参数It.IsAny<string>()传递,但是我希望传递items并在每个方法调用中接下来100个项目。有可能吗?

1 个答案:

答案 0 :(得分:1)

您可以通过比较两个数组是否包含相同元素(使用items)来传递SequenceEqual范围并验证调用:

List<string> items = GetListOfStrings(494);

Mock.Get(someRepository).Verify(repository => repository.GetSomeItems(It.Is<string[]>(strings => strings.SequenceEqual(items.GetRange(0, 100)))), Times.Once);
Mock.Get(someRepository).Verify(repository => repository.GetSomeItems(It.Is<string[]>(strings => strings.SequenceEqual(items.GetRange(100, 100)))), Times.Once);
Mock.Get(someRepository).Verify(repository => repository.GetSomeItems(It.Is<string[]>(strings => strings.SequenceEqual(items.GetRange(200, 100)))), Times.Once);
// ...