At the moment I have:
[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");
}
But the order in which I draw my objects in the production code does not matter. I could do one first, or two it doesn t matter. However it should matter as the draw order is important.
How do you (using Moq) ensure methods are called in a certain order?
Edit
I got rid of that test. The draw method has been removed from my unit tests. I ll just have to manually test it works. The reversing of the order though was taken into a seperate test class where it was tested so it s not all bad.
Thanks for the link about the feature they are looking into. I sure hope it gets added soon, very handy.