C# 从封闭流读取

C# 从封闭流读取,c#,.net,stream,C#,.net,Stream,我想在单元测试中测试我的请求生成器。但当我想测试发出POST请求的方法时,我遇到了问题。我想测试它在请求流中的内容。 但问题是,我无法在测试中读取此流,因此无法测试我的数据是否以正确的方式写入请求中。 我有这个问题,因为当我在请求生成器类中写入流之后关闭流时。我无法打开它进行阅读,因为在流上调用Close()方法后,它将变得不可读。 那么,在调用Close()方法之后,是否有一种读取流的方法 如果这是不可能的,您将如何解决此问题?一旦流关闭,其内容实际上是不可访问的,因为底层缓冲区被释放或传递给

我想在单元测试中测试我的请求生成器。但当我想测试发出POST请求的方法时,我遇到了问题。我想测试它在请求流中的内容。 但问题是,我无法在测试中读取此流,因此无法测试我的数据是否以正确的方式写入请求中。 我有这个问题,因为当我在请求生成器类中写入流之后关闭流时。我无法打开它进行阅读,因为在流上调用Close()方法后,它将变得不可读。 那么,在调用Close()方法之后,是否有一种读取流的方法


如果这是不可能的,您将如何解决此问题?

一旦流关闭,其内容实际上是不可访问的,因为底层缓冲区被释放或传递给另一个实体进行处理或处置


我不确定您使用的是哪个流类,但大多数都提供了.Seek方法和.Position属性来回放流。尝试这样做,而不是关闭流。(尽管在真正完成流之后,您仍然需要关闭它。)

尝试在流周围创建一些包装器并提取其接口。此接口可能仅包含其他代码中所需的成员。 在代码中使用该接口,并允许注入/创建要使用的不同特定类型的实例-例如,创建在包含代码的类中设置字段的强制构造函数参数。
然后创建一些实现该接口的模拟,并在单元测试中使用它。

我只想添加,而不是直接调用Close(),最好按照IDisposable模式调用Dispose(),后者反过来调用Close()。
using
关键字通过在using块退出后自动调用IDisposable.Dispose()来支持此模式。我没有显式调用此close,我在using(){}中用stream包装了我的操作,因此它是自动完成的。@David Lively我在实际实现中用流完成了所有操作。我只想读取测试代码中的流内容,因此.Seek或.Position不是解决方案。@Eric如果不需要进一步访问流的任何属性,这是有意义的。在某些边缘情况下,您不希望同时执行这两项操作。@Vadja除非将流的位置重置回流的开头,否则无法从流中读取流内容,并且一旦流被释放,您就无法执行此操作。