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)); }
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 }
public Task PublishAsync <TMessage>(TMessage message) where TMessage : class { _messages.Add(message); return(_messageAggregator.PublishAsync(message)); }