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