public void ProcessThreadList_GivenInvalidConfig_ExpectThreadListStopMonitoring()
        {
            var mockConfig = new Mock <IJobConfig>();

            mockConfig.Setup(o => o.Concurrency).Returns(3);
            var mockProcessFactory = new Mock <ITestProcessFactory>();

            var mockProcessThread1 = CreateMockProcessThread();
            var mockProcessThread2 = CreateMockProcessThread();
            var mockProcessThread3 = CreateMockProcessThread();

            var processThread1 = mockProcessThread1.Object;
            var processThread2 = mockProcessThread2.Object;
            var processThread3 = mockProcessThread3.Object;

            mockProcessFactory.SetupSequence(o => o.New())
            .Returns(mockProcessThread1.Object)
            .Returns(mockProcessThread2.Object)
            .Returns(mockProcessThread3.Object);

            var expectedConfig = mockConfig.Object;
            var list           = new ProcessThreadListForTesting(expectedConfig, mockProcessFactory.Object);

            list.UpdateConfig(null);
            list.Monitor();

            Assert.IsTrue(list.NeedUpdate);
            Assert.IsFalse(processThread1.IsAlive);
            Assert.IsFalse(processThread2.IsAlive);
            Assert.IsFalse(processThread3.IsAlive);
            mockProcessThread1.Verify(o => o.Start(), Times.Never);
            mockProcessThread2.Verify(o => o.Start(), Times.Never);
            mockProcessThread3.Verify(o => o.Start(), Times.Never);
        }
        public void ProcessThreadList_GivenConfig_ExpectNeedsUpdate()
        {
            var mockConfig     = new Mock <IJobConfig>();
            var expectedConfig = mockConfig.Object;
            var list           = new ProcessThreadListForTesting(expectedConfig, null);

            Assert.AreEqual(expectedConfig, list.Config);
            Assert.IsTrue(list.NeedUpdate);

            var newConfig = new Mock <IJobConfig>().Object;

            list.UpdateConfig(newConfig);
            Assert.AreEqual(newConfig, list.Config);
        }