public void Update_ShouldExecuteEngineSystemsInCorrectOrder() { // Arrange GameTime.FixedDeltaTime = TimeSpan.FromSeconds(0.1); var gameTime = new GameTime(TimeSpan.FromSeconds(0.15)); _gameTimeProvider.GetGameTime().Returns(gameTime); var scene = TestSceneFactory.Create(); _sceneManager.CurrentScene.Returns(scene); var gameLoop = GetGameLoop(); // Act gameLoop.Update(); // Assert Received.InOrder(() => { _inputSystem.Received(1).ProcessInput(scene); _behaviorSystem.Received(1).ProcessBehaviorFixedUpdate(scene); _customSystem1.Received(1).ProcessFixedUpdate(scene); _customSystem2.Received(1).ProcessFixedUpdate(scene); _customSystem3.Received(1).ProcessFixedUpdate(scene); _physicsSystem.Received(1).ProcessPhysics(scene); _entityDestructionSystem.Received(1).DestroyEntitiesAfterFixedTimeStep(scene); _behaviorSystem.Received(1).ProcessBehaviorUpdate(scene, gameTime); _customSystem1.Received(1).ProcessUpdate(scene, gameTime); _customSystem2.Received(1).ProcessUpdate(scene, gameTime); _customSystem3.Received(1).ProcessUpdate(scene, gameTime); _physicsSystem.Received(1).PreparePhysicsDebugInformation(); _audioSystem.Received(1).ProcessAudio(scene); _animationSystem.Received(1).ProcessAnimations(scene, gameTime); _renderingSystem.Received(1).RenderScene(scene); _entityDestructionSystem.Received(1).DestroyEntitiesAfterFullFrame(scene); }); }