使用相同的junit临时文件夹进行多个单元测试

时间:2015-02-27 09:02:40

标签: java unit-testing junit

在我的测试类中,我使用junit的临时文件夹。然后我在这个文件夹中创建一个新的pdf文件,写入这个文件并进行我的断言。我的单元测试看起来像:

@Test
public void testGeneratePdfIntegration1() throws Exception {

    InputStream isMxml = SuperBarcodeProcTest.class.getResourceAsStream(RES_MXML_JOB_1);
    InputStream isThumb = SuperBarcodeProcTest.class.getResourceAsStream(RES_PNG_JOB_1);
    InputStream isPpf = SuperBarcodeProcTest.class.getResourceAsStream(RES_PPF_JOB_1);

    Path destination = tempFolder.newFile("target1.pdf").toPath();

    superBarcodeProc = new SuperBarcodeProc(isThumb, isMxml, isPpf, destination.toString());
    superBarcodeProc.setDescription("Bogen: 18163407_01_B04_ST_135gl_1000_1-1");
    superBarcodeProc.setBarcode("18163407_01");
    superBarcodeProc.generatePdf();

    assertTrue(Files.exists(destination));
    assertTrue(Files.size(destination) > 1024);
}

测试结束后,临时文件夹将被删除。问题是我有多个单元测试,它们在同一个临时文件夹中生成不同设置的pdf文件,就像我提供的代码中的测试一样,当我在课堂上运行所有测试时,只有第一个成功。我的猜测是,在第一次测试结束后,临时文件夹消失,其他测试失败,IOException表示系统无法找到给定的路径。问题是如何在没有删除文件夹的情况下将相同的文件夹用于多个单元测试,或者这是不可能的,我必须为每个测试用例创建一个临时文件夹?

2 个答案:

答案 0 :(得分:3)

我假设您尝试使用org.junit.rules.TemporaryFolder。 如果要为所有非静态测试方法保留相同的测试文件夹,可以使用:

@ClassRule
public static TemporaryFolder outputFolder = new TemporaryFolder();

仅供参考 - 以下语法将在每个@Test方法之前创建一个新文件夹,并在每次执行方法后进行清理。

@Rule
public TemporaryFolder outputFolder = new TemporaryFolder();

答案 1 :(得分:1)

我找到了解决方案。我声明我的临时文件夹是静态的,这导致了上述问题。