Модульный тест System.IO.Pipelines с использованием MemoryStream - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь проверить мои базовые настройки 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, описанное выше, в рамках моих юнит-тестов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...