1

文件夹结构在这里

控制台输出在这里

我想为以下两种方法编写一个测试类

package jfe;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZFile;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.utils.IOUtils;

public class JThreadFile {

    /**
     * uncompresses .tar file
     * @param in
     * @param out
     * @throws IOException
     */
    public static void decompressTar(String in, File out) throws IOException {
        try (TarArchiveInputStream tin = new TarArchiveInputStream(new FileInputStream(in))){
            TarArchiveEntry entry;
            while ((entry = tin.getNextTarEntry()) != null) {
                if (entry.isDirectory()) {
                    continue;
                }
                File curfile = new File(out, entry.getName());
                File parent = curfile.getParentFile();
                if (!parent.exists()) {
                    parent.mkdirs();
                }
                IOUtils.copy(tin, new FileOutputStream(curfile));
            }
        }
    }

    /**
     * uncompresses .7z file
     * @param in
     * @param destination
     * @throws IOException
     */
    public static void decompressSevenz(String in, File destination) throws IOException {
        //@SuppressWarnings("resource")
        SevenZFile sevenZFile = new SevenZFile(new File(in));
        SevenZArchiveEntry entry;
        while ((entry = sevenZFile.getNextEntry()) != null){
            if (entry.isDirectory()){
                continue;
            }
            File curfile = new File(destination, entry.getName());
            File parent = curfile.getParentFile();
            if (!parent.exists()) {
                parent.mkdirs();
            }
            FileOutputStream out = new FileOutputStream(curfile);
            byte[] content = new byte[(int) entry.getSize()];
            sevenZFile.read(content, 0, content.length);
            out.write(content);
            out.close();
        }
        sevenZFile.close();
    }

}

我使用 testNG 并尝试从文件夹中读取,过滤文件夹以获取某些扩展名(.tar 和 .7z),将这些文件提供给解压缩方法,并将结果与​​带有 AssertEquals 的实际输出文件夹进行比较。我设法从文件夹中读取文件名(请参阅控制台输出),但无法将它们提供给 decompressTar(字符串输入,文件输出)。这是因为“结果”是一个字符串数组,我需要一个字符串吗?我不知道 TestNG 的 DataProvider 如何处理数据。任何帮助将不胜感激:)谢谢:)

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;

import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class JThreadFileTest {

    protected static final File ACT_INPUT = new File("c:\\Test\\TestInput\\"); //input directory
    protected static final File EXP_OUTPUT = new File("c:\\Test\\ExpectedOutput\\"); //expected output directory
    protected static final File TEST_OUTPUT = new File("c:\\Test\\TestOutput\\");

    @DataProvider(name = "tarJobs")
    public Object[] getTarJobs() {

        //1
        String[] tarFiles = ACT_INPUT.list(new FilenameFilter()
        {
          public boolean accept(File dir, String name)
          {
            return name.endsWith(".tar");
          }
        });

        //2
        Object[] result = new Object[tarFiles.length];

        int i = 0;
        for (String filename : tarFiles) {
            result[i] = filename;
            i++;
        }
        return result;


    }

    @Test(dataProvider = "tarJobs")
    public void testTar(String result) throws IOException {
        System.out.println("Running test" + result);
        --> JThreadFile.decompressTar(result, TEST_OUTPUT);
        Assert.assertEquals(TEST_OUTPUT, EXP_OUTPUT);
    }

}
4

0 回答 0