Before the AAA syntax was introduced, you would create ordered unit tests by wrapping Expect calls in a using block like so:
var mocks = new MockRepository(); using (mocks.Ordered()) { // ... }
However, AAA syntax does not require you to instantiate a MockRepository, so how can we do ordered tests? This can be accomplished by accessing the implied MockRepository via the GetMockRepository method.
var myMock = MockRepository.GenerateMock<IMyInterface>(); using (myMock.GetMockRepository().Ordered()) { // ... }
Here’s a complete example.
[TestMethod] public void RunTest() { // Arrange var target = new Program(); var mockModel = MockRepository.GeneratePartialMock<MyModel>(); target.Model = mockModel; using (mockModel.GetMockRepository().Ordered()) { mockModel.Expect(x => x.Populate()); mockModel.Expect(x => x.Save()); } // Act target.Run(); // Assert mockModel.VerifyAllExpectations(); }
// This fails public void Run() { Model.Save(); Model.Populate(); } // This passes public void Run() { Model.Populate(); Model.Save(); }