public void Should_release_the_pool() { // Arrange var blockTheThread = new AutoResetEvent(false); var countdownEvent = new CountdownEvent(1); var queue = Substitute.For<IInMemoryPriorityQueue<GenericPriorityMessage<BasicDeliverEventArgs>>>(); queue.When(x => x.Dequeue()).Do(callInfo => { countdownEvent.Signal(); blockTheThread.WaitOne(); }); var consumer = new PriorityBurrowConsumer(Substitute.For<IModel>(), Substitute.For<IMessageHandler>(), Substitute.For<IRabbitWatcher>(), false, 1); consumer.Init(queue, Substitute.For<CompositeSubscription>(), 1, Guid.NewGuid().ToString()); consumer.Ready(); // Action countdownEvent.Wait(); countdownEvent.Reset(); blockTheThread.Set(); consumer.MessageHandlerHandlingComplete(null); countdownEvent.Wait(); // Assert queue.Received(2).Dequeue(); consumer.Dispose(); blockTheThread.Dispose(); }