生成大流以进行测试

时间:2013-12-30 17:56:06

标签: java groovy

我们有一个Web服务,我们上传文件,并希望编写一个集成测试来上传一个稍大的文件。测试过程需要生成文件(我不想将更大的文件添加到源代码控制中)。

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

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

2 个答案:

答案 0 :(得分:4)

这是一个简单的程序,可生成带有随机内容的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();
    }

}

答案 1 :(得分:3)

你可以构造一个InputStream的模拟/虚拟实现来提供随机数据,然后在你的类/库/任何期望InputStream的任何地方传递它。

像这样(未经测试):

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

    @Override
    public byte read() { return (byte)rn.nextInt(); }
}

当然,如果您需要知道数据(用于测试比较),您需要将数据保存在某处,或者您需要生成算法数据(即已知模式)而非随机数据。

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