コード例 #1
0
        public async Task A_null_message_causes_an_ArgumentNullException()
        {
            var dispatcher      = Substitute.For <IDispatcher>();
            var eventAggregator = new MessageAggregator();

            Assert.ThrowsAsync <ArgumentNullException>(async() => await eventAggregator.PublishAsync(null));
        }
コード例 #2
0
        public async Task A_valid_message_is_published_to_all_handlers()
        {
            var dispatcher      = new XamlDispatcher();
            var eventAggregator = new MessageAggregator();
            var handler1        = Substitute.For <IHandleAsync <object> >();
            var handler2        = Substitute.For <IHandleAsync <object> >();
            var handler3        = Substitute.For <IHandle <object> >();

            handler1.HandleAsync(Arg.Any <object>()).Returns(async(c) =>
            {
                Console.WriteLine(
                    $"{DateTime.Now} - Starting handler 1...");
                await Task.Delay(3000);
                Console.WriteLine(
                    $"{DateTime.Now} - Finished handler 1...");
            });
            handler3.When(c => c.Handle(Arg.Any <object>()))
            .Do((c) =>
            {
                Thread.Sleep(500);
                Console.WriteLine($"{DateTime.Now} - executing handler 3...");
            });
            handler2.HandleAsync(Arg.Any <object>()).Returns(async(c) =>
            {
                Console.WriteLine(
                    $"{DateTime.Now} - Starting handler 2...");
                await Task.Delay(3000);
                Console.WriteLine(
                    $"{DateTime.Now} - Finished handler 2...");
            });
            await eventAggregator.SubscribeAsync(handler1);

            await eventAggregator.SubscribeAsync(handler2);

            await eventAggregator.SubscribeAsync(handler3);

            var message = new object();
            await eventAggregator.PublishAsync(message);

#pragma warning disable 4014
            handler1.Received().HandleAsync(message);
            handler2.Received().HandleAsync(message);
            handler3.Received().Handle(message);
#pragma warning restore 4014
        }
コード例 #3
0
 public Task PublishAsync <TMessage>(TMessage message) where TMessage : class
 {
     _messages.Add(message);
     return(_messageAggregator.PublishAsync(message));
 }