public async Task RunShouldEmitMessageChunksToTheRxWorker(
                string messageChunk,
                [Frozen] CancellationTokenSource cancellationTokenSource,
                [Frozen, Options] IOptions <GatewayOptions> options,
                [Frozen, Substitute] IClientWebSocket webSocket,
                [Frozen, Substitute] IGatewayRxWorker rxWorker,
                [Target] DefaultGatewayService gateway
                )
            {
                var buffer            = new byte[messageChunk.Length];
                var memoryBuffer      = new Memory <byte>(buffer);
                var cancellationToken = new CancellationToken(false);

                gateway.SetPrivateField("buffer", buffer);
                gateway.SetPrivateField("memoryBuffer", memoryBuffer);

                webSocket.Receive(Any <Memory <byte> >(), Any <CancellationToken>()).Returns(x =>
                {
                    var buffer = x.ArgAt <Memory <byte> >(0);
                    ((Memory <byte>)Encoding.UTF8.GetBytes(messageChunk)).CopyTo(buffer);
                    return(new ValueWebSocketReceiveResult(messageChunk.Length, WebSocketMessageType.Text, true));
                });

                await gateway.StartAsync();

                await gateway.Run(cancellationToken);

                await rxWorker.Received().Emit(
                    Is <GatewayMessageChunk>(chunk =>
                                             Encoding.UTF8.GetString(chunk.Bytes.ToArray()) == messageChunk &&
                                             chunk.Count == messageChunk.Length &&
                                             chunk.EndOfMessage
                                             ),
                    Is(cancellationToken)
                    );
            }