public async Task Ctor_AcceptsNullReceivingStream()
    {
        var handler = new DirectMessageHandler(this.sendingStream, null, Encoding.UTF8);

        Assert.False(handler.CanRead);
        Assert.True(handler.CanWrite);

        await Assert.ThrowsAsync <InvalidOperationException>(() => handler.ReadAsync(TimeoutToken));

        string expected = "bye";
        await handler.WriteAsync(expected, TimeoutToken);

        string actual = await handler.WrittenMessages.DequeueAsync(TimeoutToken);

        Assert.Equal(expected, actual);
    }
    public async Task Ctor_AcceptsNullSendingStream()
    {
        var handler = new DirectMessageHandler(null, this.receivingStream, Encoding.UTF8);

        Assert.True(handler.CanRead);
        Assert.False(handler.CanWrite);

        await Assert.ThrowsAsync <InvalidOperationException>(() => handler.WriteAsync("hi", this.TimeoutToken).AsTask());

        JToken expected = "bye";

        handler.MessagesToRead.Enqueue(expected);
        JToken actual = await handler.ReadAsync(this.TimeoutToken);

        Assert.Equal(expected, actual);
    }