public void TestRun()
        {
            ILogMessage message1 = Substitute.For <ILogMessage>();
            ILogMessage message2 = Substitute.For <ILogMessage>();
            ILogMessage message3 = Substitute.For <ILogMessage>();
            ILogMessage message4 = Substitute.For <ILogMessage>();
            ILogMessage message5 = Substitute.For <ILogMessage>();
            ILogMessage message6 = Substitute.For <ILogMessage>();
            IMessageQueue <ILogMessage> messageQueue = Substitute.For <IMessageQueue <ILogMessage> >();
            QueueLogRunner logRunner = new QueueLogRunner(messageQueue, 0);
            int            counter   = 0;

            messageQueue.TakeAll().Returns(delegate
            {
                IMessageQueue <ILogMessage> messageQueue2 = Substitute.For <IMessageQueue <ILogMessage> >();
                if (counter == 0)
                {
                    messageQueue2.GetEnumerator().Returns(new ArrayEnumerator <ILogMessage>(message1, message2));
                }
                else if (counter == 1)
                {
                    logRunner.RequestStop(); // Called from Running state
                    messageQueue2.GetEnumerator().Returns(new ArrayEnumerator <ILogMessage>(message3, message4));
                }
                else
                {
                    logRunner.RequestStop(); // Called from StopRequested state
                    messageQueue2.GetEnumerator().Returns(new ArrayEnumerator <ILogMessage>(message5, message6));
                }
                counter++;
                return(messageQueue2);
            });

            IBasicLogger logger = Substitute.For <IBasicLogger>();

            logRunner.Run(logger);

            logRunner.RequestStop(); // Called from Stopped state

            Received.InOrder(delegate
            {
                message1.LogTo(logger);
                message2.LogTo(logger);
                message3.LogTo(logger);
                message4.LogTo(logger);
                message5.LogTo(logger);
                message6.LogTo(logger);
            });
        }