C# 用MemoryStream模拟用于单元测试的网络流
我有一个类正在包装一个流,其目的是使该流很可能是一个NetworkStream。然而,在单元测试中,使用MemoryStream来验证功能要容易得多。然而,我注意到MemoryStream和NetworkStream实际上在写操作上的作用并不相同 当我写入MemoryStream时,流的seek指针被设置为我所写内容的末尾。为了读出我写的内容,我必须将Seek指针调整回我写的内容的开头 当我写入网络流时,流的另一端可以读取该数据,而无需调整seek指针 我假设NetworkStream在内部处理seek指针的概念,并确保即使它在另一端将数据填充到流中,它也不会调整指针C# 用MemoryStream模拟用于单元测试的网络流,c#,unit-testing,stream,C#,Unit Testing,Stream,我有一个类正在包装一个流,其目的是使该流很可能是一个NetworkStream。然而,在单元测试中,使用MemoryStream来验证功能要容易得多。然而,我注意到MemoryStream和NetworkStream实际上在写操作上的作用并不相同 当我写入MemoryStream时,流的seek指针被设置为我所写内容的末尾。为了读出我写的内容,我必须将Seek指针调整回我写的内容的开头 当我写入网络流时,流的另一端可以读取该数据,而无需调整seek指针 我假设NetworkStream在内部处理
那么我的问题是,在MemoryStream中模仿同样行为的最佳方式是什么?我想我可能只是把指针找回到我写的相同字节数,但这似乎很难。另外,如果我将这些流或其他包装流堆叠在一起,它们如何知道指针是否需要重置?MemoryStream不是为您使用它而设计的。NetworkStream设计为允许您用输出填充内存块。它的设计目的不是让第二个对象读取原始对象正在写入的内容 我建议您创建一个FakenNetworkStream类。您将有两个对象,写入其中一个对象将向另一个对象添加数据。但是FakenNetworkStream的优点是,您可以实现病理套接字行为来检测尽可能多的bug
听起来不错,我觉得事情并不像现在这样有意义。谢谢,我还没有想到网络流会带来哪些潜在的shinangins。