我有一个包装流的类,该流的意图可能是NetworkStream。但是在单元测试中,使用MemoryStream来验证功能要容易得多。但是我注意到MemoryStream和NetworkStream在写入时实际上并没有相同的行为。
当我写入MemoryStream时,流的搜索指针设置为我写的结尾。为了读出我写的内容,我必须将Seek指针调整回我写的开头。
当我写入NetworkStream时,流的另一端可以读取该数据而无需调整搜索指针。
我假设NetworkStream在内部处理搜索指针的概念,并确保即使它正在将数据填充到另一侧的流中,也不会调整指针。
我的问题是,在MemoryStream中模拟相同行为的最佳方法是什么?我以为我可能只是寻找指针返回我写的相同数量的字节,但这似乎很狡猾。此外,如果我将这些流中的几个堆叠在一起或其他包裹的流,他们将如何知道指针是否需要重置?
答案 0 :(得分:2)
MemoryStream不是为您的使用方式而设计的。 NetworkStream旨在允许您使用输出填充内存块。它的目的不是让第二个对象读取原始对象所写的内容。
我建议你创建一个FakeNetworkStream类。你会有两个对象,写一个会将数据添加到另一个。但是FakeNetworkStream的优点是你可以实现病态套接字行为来检测尽可能多的错误。