生产代码(示例)
class ClassToTest {
public SomeResult interpreteZipFile(InputStream is) {
ZippedInputStream zis = new ZippedInputStream(is);
//other code with something returned
}
}
不知何故,我想在不使用复杂的外部zip资源的情况下测试我的课程(没人想要)。是否有一些简单的解决方案可以做这样的事情?
classTotest.interpreteZipFile(new MockToBeZippedFile(new ReaderInputStream(new StringReader("some content"))));
我想只是“欺骗”InputStream
是一个zip文件而不进入内容的类。
答案 0 :(得分:0)
复制java.util.zip - Recreating directory structure:
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.util.Deque;
import java.util.LinkedList;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipIt {
public void zipDir(String folderToZip, String zipName) {
File directory = new File(folderToZip);
File zipFile = new File(zipName);
try {
ZipIt.zip(directory, zipFile);
} catch (IOException e) {
e.printStackTrace();
}
}
public void zipDir(String folderToZip, String toLocation, String zipName) {
this.zipDir(folderToZip, toLocation + File.separator + zipName);
}
private static void zip(File directory, File zipfile) throws IOException {
URI base = directory.toURI();
Deque<File> queue = new LinkedList<File>();
queue.push(directory);
OutputStream out = new FileOutputStream(zipfile);
Closeable res = out;
try {
ZipOutputStream zout = new ZipOutputStream(out);
res = zout;
while (!queue.isEmpty()) {
directory = queue.pop();
for (File kid : directory.listFiles()) {
String name = base.relativize(kid.toURI()).getPath();
if (kid.isDirectory()) {
queue.push(kid);
name = name.endsWith("/") ? name : name + "/";
zout.putNextEntry(new ZipEntry(name));
} else {
zout.putNextEntry(new ZipEntry(name));
copy(kid, zout);
zout.closeEntry();
}
}
}
} finally {
res.close();
}
}
private static void copy(InputStream in, OutputStream out)
throws IOException {
byte[] buffer = new byte[1024];
while (true) {
int readCount = in.read(buffer);
if (readCount < 0) {
break;
}
out.write(buffer, 0, readCount);
}
}
private static void copy(File file, OutputStream out) throws IOException {
InputStream in = new FileInputStream(file);
try {
copy(in, out);
} finally {
in.close();
}
}
}