В данный момент у меня есть:
[Test]
public void DrawDrawsAllScreensInTheReverseOrderOfTheStack() {
// Arrange.
var screenMockOne = new Mock<IScreen>();
var screenMockTwo = new Mock<IScreen>();
var screens = new List<IScreen>();
screens.Add(screenMockOne.Object);
screens.Add(screenMockTwo.Object);
var stackOfScreensMock = new Mock<IScreenStack>();
stackOfScreensMock.Setup(s => s.ToArray()).Returns(screens.ToArray());
var screenManager = new ScreenManager(stackOfScreensMock.Object);
// Act.
screenManager.Draw(new Mock<GameTime>().Object);
// Assert.
screenMockOne.Verify(smo => smo.Draw(It.IsAny<GameTime>()), Times.Once(),
"Draw was not called on screen mock one");
screenMockTwo.Verify(smo => smo.Draw(It.IsAny<GameTime>()), Times.Once(),
"Draw was not called on screen mock two");
}
Но порядок, в котором я рисую объекты в производственном коде, не имеет значения. Я мог бы сделать сначала, или два, это неважно. Однако это должно иметь значение, поскольку порядок вытягивания важен.
Как вы (используя Moq) гарантируете, что методы вызываются в определенном порядке?
Edit
Я избавился от этого теста. Метод draw был удален из моих модульных тестов. Мне просто нужно вручную протестировать его. Реверсирование порядка, хотя и было принято в отдельный тестовый класс, где он был протестирован, поэтому он не все плохо.
Спасибо за ссылку о том, что они ищут. Я надеюсь, что он скоро добавится, очень удобно.