2

测试审查表明,MemoryStream总是返回“顺利”的结果。即,如果我们从MemoryStream400 字节的工作缓冲区中读取 200 个字节,它总是在一次调用中准确返回 200 个字节。如果我们将 4000 字节读入 200 字节的工作缓冲区,它总是正好 20 次迭代,每次正好 200 字节。

问题是MemoryStream罐子(在现实世界中,极端情况)代表慢流源(如网络或文件)。因此,读取可能不会如此确定地平滑。每个Read操作都可能返回不确定的读取字节(例如:8、1、105、20、5、80 ...)

那么将香草MemoryStream变成(因为缺少更好的词)a的好方法是什么ChaosStream,其中读取的字节数是 1 和读取请求之间的随机数count?(请注意,0 表示流结束)。字节本身需要是底层字节,只需对它们进行一些随机/抖动读取以扩展测试覆盖率。

4

1 回答 1

5

您总是可以从中派生MemoryStream以提供一些随机性:

public class ChaosStream : MemoryStream
{
    private Random random = new Random();

    // Create constructors as needed to match desired MemoryStream construction

    public override int Read(byte[] buffer, int offset, int count)
    {
        int newCount = random.Next(1, count + 1);
        return base.Read(buffer, offset, newCount);
    }
}
于 2013-08-01T19:46:29.593 回答