public void Should_close_queue_and_end_other_thread() { // Arrange var channel = Substitute.For<IModel>(); var queue = Substitute.For<IInMemoryPriorityQueue<GenericPriorityMessage<BasicDeliverEventArgs>>>(); queue.When(x => x.Dequeue()).Do(callInfo => Thread.Sleep(100)); var consumer = new PriorityBurrowConsumer(channel, Substitute.For<IMessageHandler>(), Substitute.For<IRabbitWatcher>(), true, 1); var sub = Substitute.For<CompositeSubscription>(); sub.AddSubscription(new Subscription(channel) { ConsumerTag = "Burrow" }); consumer.Init(queue, sub, 1, Guid.NewGuid().ToString()); consumer.Ready(); // Action consumer.WhenChannelShutdown(channel, new ShutdownEventArgs(ShutdownInitiator.Application, 0, "Just shut it down")); // Assert consumer.Dispose(); }