public void DisposeUnregistersCallback()
        {
            var queueName    = "My.QueueName";
            var topicFilters = new List <string> {
                "My.*.Filter", "MVM.#"
            };
            var context = new InMemoryContext();
            var target  = new InMemoryMessageReceiver(context, queueName, topicFilters);

            target.StartReceivingMessages();
            EventMessageReceivedCallback callback = m => { };

            target.StartHandlingMessages(callback);

            // Check Arrange
            var queue = context.Connection.GetNamedMessageQueue(queueName);

            Assert.AreEqual(true, queue.HasConsumer);

            // Act
            target.Dispose();

            // Assert
            queue = context.Connection.GetNamedMessageQueue(queueName);
            Assert.AreEqual(false, queue.HasConsumer);
        }
        public void CannotCall_StartHandlingMessages_AfterDispose()
        {
            var queueName    = "My.QueueName";
            var topicFilters = new List <string> {
                "My.*.Filter", "MVM.#"
            };
            var context = new InMemoryContext();
            var target  = new InMemoryMessageReceiver(context, queueName, topicFilters);

            target.Dispose();

            Action act = () =>
            {
                target.StartReceivingMessages();
            };

            var ex = Assert.ThrowsException <ObjectDisposedException>(act);

            Assert.AreEqual("Cannot access a disposed object.\r\nObject name: 'InMemoryMessageReceiver'.",
                            ex.Message);
        }