Będziemy mockować interfejs:
public interface INumerable { int GetNumber { get; } }Standardowo, aby uzyskać różne wartości przy wywołaniu należało wykonać coś takiego:
var listOfReturnedelements = new List<int> {1, 4, 1, 8}; int number = 0; var numMock= new Mock<INumerable>(); numMock .Setup(x=>x.GetNumber) .Returns(() => listOfReturnedelements[number]) .Callback(() => number++) ;Musimy zdefiniować dodatkową zmienną określająca index listy oraz wywołać metodę Callback, aby zwiększać ten index.
Za każdym razem jak wywołamy num.GetNumber() to dostajemy inną wartość tablicy. Poniżej przykład użycia:
var num = numMock.Object; var list = new List<int>(); for (int i = 0; i < 4; i++) { list.Add(num.GetNumber); }
Zamiast tego to możesz skorzystać z metody:
public static void ReturnsInOrder<T, TResult>(this ISetup<T, TResult> setup, IEnumerable<TResult> results) where T : class { setup.Returns(new Queue<TResult>(results).Dequeue); }A kod ustawiający obiekt mockujący wygląda następująco:
numMock .Setup(x=>x.GetNumber) .ReturnsInOrder(listOfReturnedelements)
Troszkę krótkie wywołanie, ale bardzo mi się podoba użycie kolejki w rozwiązaniu.
Brak komentarzy:
Prześlij komentarz