Я пытаюсь проверить мои базовые настройки c System.IO.Pipeslines, где память от устройства записи будет заполняться из потока (ReadAsync
-метода) TcpClient, аналогичного этому коду.
Memory<byte> memory = writer.GetMemory(minimumBufferSize);
int read = await stream.ReadAsync(memory);
NetworkStream
из TcpClient
предотвратит продолжение, если оно ожидает данных / если нет данных для чтения. Я использую интерфейсы всех связанных с сетью частей (Stream, TcpClient, ...), чтобы смоделировать их в модульных тестах. В моих тестах я использую MemoryStreams в своих mock
streamMock
.Setup(m => m.ReadAsync(It.IsAny<Memory<byte>>(), It.IsAny<CancellationToken>()))
.Returns((Memory<byte> memory, CancellationToken token) =>
{
return memStream.ReadAsync(memory, cancelToken);
}
Проблема в том, что используемый MemoryStream всегда будет продолжаться мгновенно с чтением 0 байтов, поскольку ReadAsync
является только асинхронной оболочкой вокруг Read
. Возможно ли получить подобное поведение NetworkStream
, описанное выше, в рамках моих юнит-тестов?