public IMessageSubscription Create(
         IChannelManagerFactory channelManagerFactory,
         Type[] messageHandlerTypes)
        {
            var listener = new RabbitMQMessageListener(channelManagerFactory, messageHandlerTypes, this.messageHandlerTypesIndexFactory, this.messageHandlerInvokerFactory, this.queueNameConvention, this.messageEncoder, this.messageSerialiser, this.logger, this.configuration);
             var subscription = new MessageSubscription(this.taskLibrary, listener);

             return subscription;
        }
        public void SetupBeforeEachTest()
        {
            this.channelManagerFactory = A.Fake<IChannelManagerFactory>();
             this.channelManager = A.Fake<IChannelManager>();
             this.queueNameConvention = A.Fake<IQueueNameConvention>();
             this.messageHandlerTypesIndexFactory = A.Fake<IMessageHandlerTypesIndexFactory>();
             this.messageHandlerInvokerFactory = A.Fake<IMessageHandlerInvokerFactory>();
             this.messageEncoder = A.Fake<IMessageEncoder>();
             this.messageSerialiser = A.Fake<IMessageSerialiser>();
             this.logger = A.Fake<ILogger>();
             this.configuration = A.Fake<IConfiguration>();
             this.model = A.Fake<IModel>();
             this.messageHandlerTypesIndex = A.Fake<IMessageHandlerTypesIndex>();
             this.messageHandlerInvoker = A.Fake<IMessageHandlerInvoker>();
             this.messageHandlerTypes = new Type[0];

             A.CallTo(() => this.channelManagerFactory.Create()).Returns(this.channelManager);
             A.CallTo(() => this.channelManager.CreateChannel()).Returns(this.model);
             A.CallTo(() => this.messageHandlerTypesIndexFactory.Create(A<Type[]>._)).Returns(this.messageHandlerTypesIndex);
             A.CallTo(() => this.messageHandlerInvokerFactory.CreateAggregate(A<IMessageHandlerTypesIndex>._)).Returns(this.messageHandlerInvoker);
             A.CallTo(() => this.configuration.ListenTimeout).Returns(20);

             this.componentUnderTest = new RabbitMQMessageListener(this.channelManagerFactory, this.messageHandlerTypes, this.messageHandlerTypesIndexFactory, this.messageHandlerInvokerFactory, this.queueNameConvention, this.messageEncoder, this.messageSerialiser, this.logger, this.configuration);
        }
        public void ShouldNotDisposeOfConnectionDuringFinalise()
        {
            // Listen will create the channel
             this.componentUnderTest.ListenOnce();

             this.componentUnderTest = null;
             GC.Collect();
             GC.WaitForPendingFinalizers();

             A.CallTo(() => this.channel.Dispose()).MustNotHaveHappened();
        }