2016-08-24 3 views
1

У меня есть некоторый репозиторий, и у меня есть метод, который я бы хотел проверить, который вызывается в цикле с параметром в виде массива. Этот метод принимает значения из массива на 100 элементов за раз. Поэтому, если у меня есть массив с 434 элементами, метод должен вызываться 5 раз.Проверьте несколько вызовов с различными параметрами некоторого метода с помощью moq

Так как же я могу проверить этот метод, если, например, Мне нужно проверить этот метод, который будет вызываться 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

Вы можете передать диапазоны 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); 
// ... 
+0

Спасибо, чувак! –

+0

@MaximKonyuh. Пожалуйста, я рад, что смогу помочь. –