public void can_handle_multiple_subscribers()
        {
            TestQueuedSubscriber secondSubscriber = new TestQueuedSubscriber(Bus);

            var msg2 = new TestMessage2();

            Bus.Publish(msg2);
            Assert.Equal(BusMessages.Count, 2);

            var msg3 = new TestMessage2();

            Bus.Publish(msg3);
            Assert.Equal(BusMessages.Count, 3);

            Message deQdMsg;

            if (BusMessages.TryDequeue(out deQdMsg))
            {
                Assert.IsType <TestMessage>(deQdMsg);
            }
            if (BusMessages.TryDequeue(out deQdMsg))
            {
                Assert.IsType <TestMessage2>(deQdMsg);
            }

            if (BusMessages.TryDequeue(out deQdMsg))
            {
                Assert.IsType <TestMessage2>(deQdMsg);
            }

            Assert.False(BusMessages.TryDequeue(out deQdMsg));

            Assert.IsOrBecomesTrue(
                () => Interlocked.Read(ref MessageSubscriber.TimesTestMessageHandled) == 1,
                1000,
                $"Expected 1 TestMessage, handled by first subscriber {MessageSubscriber.TimesTestMessageHandled}");

            Assert.IsOrBecomesTrue(
                () => Interlocked.Read(ref secondSubscriber.TimesTestMessageHandled) == 0,
                1000,
                $"Expected 0 TestMessage handled by second subscriber, found {secondSubscriber.TimesTestMessageHandled}");

            Assert.IsOrBecomesTrue(
                () => Interlocked.Read(ref MessageSubscriber.TimesTestMessage2Handled) == 2,
                1000,
                $"Expected 2 TimesTestMessage2Handled by secondSubscriber, found {MessageSubscriber.TimesTestMessage2Handled}");

            Assert.IsOrBecomesTrue(
                () => Interlocked.Read(ref secondSubscriber.TimesTestMessage2Handled) == 2,
                1000,
                $"Expected 2 TimesTestMessage2Handled by second subscriber, found {secondSubscriber.TimesTestMessage2Handled}");
        }
Esempio n. 2
0
 protected override void Given()
 {
     MessageSubscriber = new TestQueuedSubscriber(Bus);
 }