public async Task Handle_relays_sequentially(
            Random random,
            ConcurrentQueue <int> log,
            Message message)
        {
            // Arrange
            var handlers = new IMessageHandler[10];

            for (int i = 0; i < handlers.Length; i++)
            {
                int order = i;
                handlers[i] = new DelegatingMessageHandler(async _ =>
                {
                    await Task.Delay(millisecondsDelay: random.Next(100, 1000));
                    log.Enqueue(order);
                });
            }

            var sut = new SequentialCompositeMessageHandler(handlers);

            // Act
            await sut.Handle(message);

            // Assert
            log.Should().BeInAscendingOrder();
        }
        public async Task Handle_does_not_relay_to_handlers_not_able_to_handle_message(
            IMessageHandler[] handlers, Message message)
        {
            var sut  = new SequentialCompositeMessageHandler(handlers);
            var some = handlers.OrderBy(x => x.GetHashCode()).Skip(1).ToList();

            some.ForEach(handler => Mock.Get(handler).Setup(x => x.CanHandle(message)).Returns(false));

            await sut.Handle(message);

            foreach (IMessageHandler handler in some)
            {
                Mock.Get(handler).Verify(x => x.Handle(message), Times.Never());
            }
        }