public void DoNotStartElectionAfterDisposal() { // arrange var resetEvent = new ManualResetEvent(false); var timeout = TimeSpan.FromMilliseconds(100); var configMock = new Mock <IServerConfiguration>(); configMock.Setup(mocked => mocked.ElectionTimeout).Returns(timeout); var config = configMock.Object; var scheduler = new EventLoop(); var serverMock = new Mock <IConsensusServerStateApi>(); serverMock.Setup(mocked => mocked.StartElection()).Callback(() => resetEvent.Set()); serverMock.Setup(mocked => mocked.Configuration).Returns(config); serverMock.Setup(mocked => mocked.Scheduler).Returns(scheduler); var server = serverMock.Object; var state = new Follower(server); // act state.Start(); state.Dispose(); var changedToCandidate = resetEvent.WaitOne(timeout + timeout); // assert Assert.That(changedToCandidate, Is.False, "An election timout should not have occurred because the follower is disposed"); // cleanup scheduler.Dispose(); resetEvent.Dispose(); }