使用最小起订量验证某些方法的不同参数的多次调用

Verify multiple invocations with different parameters of some method using 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 个项目。可能吗?

您可以传递 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);
// ...