2016-08-24 88 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。不客氣,我很高興能夠提供幫助。 –

相關問題