生成大流进行测试

Dav*_*d V 4 java groovy

我们有一个 Web 服务,我们可以在其中上传文件,并希望编写一个集成测试来上传一个有点大的文件。测试过程需要生成文件(我不想在源代码管理中添加一些更大的文件)。

我希望生成一个大约 50 MB 的流来上传。数据本身并不重要。我用内存中的对象尝试了这个,这很容易,但我的内存不足。

集成测试是用 Groovy 编写的,因此我们可以使用 Groovy 或 Java API 来生成数据。我们如何生成用于上传的随机流,而无需一直将其保存在内存中?

pet*_*rov 5

这是一个简单的程序,它生成一个包含随机内容的 50 MB 文本文件。

import java.io.PrintWriter;
import java.util.Random;


public class Test004 {

    public static void main(String[] args) throws Exception {
        PrintWriter pw = new PrintWriter("c:/test123.txt");
        Random rnd = new Random();
        for (int i=0; i<50*1024*1024; i++){
            pw.write('a' + rnd.nextInt(10));
        }
        pw.flush();
        pw.close();
    }

}
Run Code Online (Sandbox Code Playgroud)


Oli*_*rth 5

您可以构建一个模拟/虚拟实现InputStream来提供随机数据,然后将其传递到您的类/库/任何需要InputStream.

像这样的东西(未经测试):

class MyDummyInputStream extends InputStream {
    private Random rn = new Random(0);

    @Override
    public byte read() { return (byte)rn.nextInt(); }
}
Run Code Online (Sandbox Code Playgroud)

当然,如果您需要了解数据(出于测试比较目的),您要么需要将此数据保存在某处,要么需要生成算法数据(即已知模式)而不是随机数据。

(当然,我相信您会发现现有的框架可以为您完成所有这些事情......)