protected IHServiceRootRunner BuildRootRunner <TMonitor>(out TestSetMonitorService monitorService)
            where TMonitor : TestSetMonitor, new()
        {
            monitorService = BuildTestSetMonitorService <TMonitor>();

            var provider = BuildServicesProvider(monitorService);

            return(new HServiceRootRunner(provider));
        }
        protected TestSetMonitorService BuildTestSetMonitorService <TMonitor>()
            where TMonitor : TestSetMonitor, new()
        {
            var service = new TestSetMonitorService(BuildTestMonitor <TMonitor>());

            service.Initialize();

            return(service);
        }
        protected void BuildFailedTestSetMonitorService(out TestSetMonitorService service, out FailedSetMonitor monitor)
        {
            service = BuildTestSetMonitorService <FailedSetMonitor>();
            Assert.IsNotNull(service);
            Assert.IsTrue(service.Initialize());

            monitor = service.InternalMonitor as FailedSetMonitor;
            Assert.IsNotNull(monitor);
        }
        protected void AssertChangedValue(TestSetMonitorService service, int key, string value)
        {
            service.ChangeItem(key, value);
            service.WaitOnUpdate();

            TestMonitorItem item;

            Assert.IsNotNull(item = service.ChangedItem);
            Assert.AreEqual(item.Key, key);
            Assert.AreEqual(item.Value, value);
        }
        protected void AssertAddedValue(TestSetMonitorService service, int key, string value)
        {
            service.AddItem(key, value);
            service.WaitOnUpdate();

            Collection <TestMonitorItem> newItems;

            Assert.IsNotNull(newItems = service.NewItems);
            Assert.AreEqual(newItems.Count, 1);

            TestMonitorItem added;

            Assert.IsNotNull(added = newItems.FirstOrDefault());
            Assert.AreEqual(added.Key, key);
            Assert.AreEqual(added.Value, value);
        }
        protected void AssertRemovedValue(TestSetMonitorService service, int key)
        {
            var initialStatus = service.Status;

            service.RemoveItem(key);
            service.WaitOnUpdate();

            Collection <TestMonitorItem> removedItems;

            Assert.AreEqual(service.Status, initialStatus);
            Assert.IsNotNull(removedItems = service.RemovedItems);
            Assert.AreEqual(removedItems.Count, 1);

            TestMonitorItem removed;

            Assert.IsNotNull(removed = removedItems.FirstOrDefault());
            Assert.AreEqual(removed.Key, key);
        }