public void TearDown()
 {
     Executor.RemoveAllSubscriptions();
     Executor.RemoveRequestQueues();
     Executor.Dispose();
     Executor = null;
 }
        public void Setup()
        {
            Executor = new StepDefinitionsExecutor();

            Executor.InitializeDependencyResolver();
            Executor.InitializeMessageBus();
            Executor.ResetInMemoryTestData();
            Executor.RemoveRequestQueues();
        }
        public void TestSendingOneMessageToOneSubscriberFollowingToOneMessageToTwoSubscribers()
        {
            using (var executor = new StepDefinitionsExecutor())
            {
                executor.InitializeMessageBus();

                PublishOneMessageToOneSubscriber(executor);
                AssertOnlyOneMessageWasReceived(executor);

                PublishOneMessageToTwoSubscribers(executor);
                AssertTheSameMessageWasReceivedByBothSubscribers(executor);
            }
        }
        private static void PublishOneMessageToOneSubscriber(StepDefinitionsExecutor executor)
        {
            executor.ResetInMemoryTestData();

            executor.PerformSubscription<EventOccurred>(
                executor.MessagesReceivedBySubscriber1,
                executor.MessageHandlerForSubscriber1,
                "DadoQueUmAssinanteSeInscrevaParaReceberAMensagemEventOccurred",
                null
            );

            executor.PerformPublication<EventOccurred>();

            //Dá algum tempo para que as filas recebam as mensagens, antes de remover a inscrição
            executor.Wait(3);

            executor.RemoveAllSubscriptions();
        }
 private static void AssertTheSameMessageWasReceivedByBothSubscribers(StepDefinitionsExecutor executor)
 {
     executor.MessagesReceivedBySubscriber1.Should().NotBeEmpty();
     executor.MessagesReceivedBySubscriber1.Should().ContainSingle(m => m is EventOccurred);
     executor.MessagesReceivedBySubscriber2.Should().NotBeEmpty();
     executor.MessagesReceivedBySubscriber2.Should().ContainSingle(m => m is EventOccurred);
 }