我正在尝试测试基本的System.IO.Pipelines设置,在该设置中将使用类似于this代码的TcpClient流(ReadAsync
-方法)填充写入器的内存。
Memory<byte> memory = writer.GetMemory(minimumBufferSize);
int read = await stream.ReadAsync(memory);
NetworkStream
中的TcpClient
将在等待数据/没有数据读取时阻止继续。我正在使用所有与网络相关的部分(Stream,TcpClient等)的接口在单元测试中模拟它们。在测试中,我在模拟中使用MemoryStreams
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
行为?