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) ); }