public void should_destroy_all_systems_and_handlers_when_disposed() { var fakeSetupSystemHandler1 = Substitute.For <IConventionalSystemHandler>(); var fakeSetupSystemHandler2 = Substitute.For <IConventionalSystemHandler>(); var fakeSystem1 = Substitute.For <ISetupSystem>(); var fakeSystem2 = Substitute.For <ISetupSystem>(); var fakeSystem3 = Substitute.For <ISetupSystem>(); fakeSetupSystemHandler1.CanHandleSystem(Arg.Any <ISystem>()).Returns(true); fakeSetupSystemHandler2.CanHandleSystem(Arg.Any <ISystem>()).Returns(true); var systemExecutor = new SystemExecutor(new[] { fakeSetupSystemHandler1, fakeSetupSystemHandler2 }); systemExecutor._systems.Add(fakeSystem1); systemExecutor._systems.Add(fakeSystem2); systemExecutor._systems.Add(fakeSystem3); systemExecutor.Dispose(); fakeSetupSystemHandler1.Received(3).DestroySystem(Arg.Any <ISystem>()); fakeSetupSystemHandler2.Received(3).DestroySystem(Arg.Any <ISystem>()); fakeSetupSystemHandler1.Received(1).Dispose(); fakeSetupSystemHandler2.Received(1).Dispose(); Assert.Empty(systemExecutor._systems); }