2016-08-24 2 views
1

일부 저장소가 있고 배열로 매개 변수가있는 루프에서 호출되는 테스트 할 메소드가 있습니다. 이 방법은 한 번에 100 개 항목 씩 배열에서 값을 가져옵니다. 그래서 만약 내가 434 아이템을 가진 배열을 가지고 있다면 5 번 호출해야한다.moq를 사용하는 다른 메소드의 매개 변수가 여러 개인 호출 확인

예를 들어 다음과 같은 경우이 메소드를 얼마나 정확하게 테스트 할 수 있습니까? 이 메소드가 434 개 항목을 갖는 매개 변수 배열로 전달되면서 5 번 호출되도록 확인해야합니까?

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. 환영합니다. 기꺼이 도와 드리겠습니다. –

관련 문제