public async Task Subscribe_NullRawMessageHandler_ThrowsArgumentNull(
            string topic,
            RedisRawMessageHandlerSubscriber sut)
        {
            var ex = await Assert.ThrowsAsync <ArgumentNullException>(() => sut.Subscribe(topic, null, None));

            Assert.Equal("rawHandler", ex.ParamName);
        }
        public async Task Subscribe_NullTopic_ThrowsArgumentNull(
            IRawMessageHandler rawMessageHandler,
            RedisRawMessageHandlerSubscriber sut)
        {
            var ex = await Assert.ThrowsAsync <ArgumentNullException>(() => sut.Subscribe(null, rawMessageHandler, None));

            Assert.Equal("topic", ex.ParamName);
        }
        public async Task Subscribe_MultiplexerReturnsNoSubscription_ThrowsInvalidOperation(
            [Frozen] IConnectionMultiplexer connectionMultiplexer,
            string topic,
            IRawMessageHandler rawMessageHandler,
            RedisRawMessageHandlerSubscriber sut)
        {
            connectionMultiplexer.GetSubscriber().ReturnsNull();

            var ex = await Assert.ThrowsAsync <InvalidOperationException>(() => sut.Subscribe(topic, rawMessageHandler, None));

            Assert.Equal("Redis Multiplexer returned no subscription.", ex.Message);
        }
        public async Task Subscribe_SubscribersRawMessageHandler(
            [Frozen] ISubscriber subscriber,
            string topic,
            byte[] message,
            IRawMessageHandler rawMessageHandler,
            RedisRawMessageHandlerSubscriber sut)
        {
            Action <RedisChannel, RedisValue> redisCallback = null;
            await subscriber.SubscribeAsync(topic, Arg.Do <Action <RedisChannel, RedisValue> >(action => redisCallback = action));

            await sut.Subscribe(topic, rawMessageHandler, None);

            Assert.NotNull(redisCallback);
            redisCallback(topic, message);
            await rawMessageHandler.Received(1).Handle(topic, message, None);
        }