我们有一个Web服务,我们上传文件,并希望编写一个集成测试来上传一个稍大的文件。测试过程需要生成文件(我不想将更大的文件添加到源代码控制中)。
我希望生成一个大约50 MB的流来上传。数据本身并不重要。我用一个内存中的对象尝试了这个,这很容易,但我的内存不足。
集成测试是用Groovy编写的,因此我们可以使用Groovy或Java API生成数据。我们如何生成一个随机流进行上传而不是一直将其保存在内存中?
答案 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(); }
}
当然,如果您需要知道数据(用于测试比较),您需要将数据保存在某处,或者您需要生成算法数据(即已知模式)而非随机数据。
(当然,我相信你会发现现有的框架可以为你做所有这些事情......)