使用MemoryStream进行单元测试System.IO.Pipelines

时间:2020-03-13 21:44:04

标签: c# xunit

我正在尝试测试基本的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行为?

0 个答案:

没有答案