2015-02-27 3 views
1

В моем тестовом классе я использую временную папку junit. Затем я создаю новый файл PDF в этой папке, пишу в этот файл и делаю свои утверждения. Мой блок-тест выглядит следующим образом:Использовать ту же самую временную папку junit для нескольких модульных тестов

@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-файл с разными настройками в той же папке temp, что и тест в коде, который я предоставил, и когда я запускаю все тесты в классе, только первые успевают. Я предполагаю, что после того, как первый тест завершился, папка temp исчезла, а другие тесты завершились с ошибкой IOException, говоря, что система не может найти данный путь. Вопрос в том, как я могу использовать одну и ту же папку для нескольких модульных тестов без удаленной папки или это невозможно, и мне нужно создать временную папку для каждого тестового примера?

+1

Попробуйте создать файлы внутри метода с @Before. Файл будет создан для каждого создаваемого вами теста. – programmer23

+1

Обратите внимание, что отсутствие разделения между тестовыми случаями на самом деле является антипаттерном и может привести к недетерминированным результатам. Кроме того, тест, который генерирует PDF, вряд ли можно назвать тестом «unit» *. – kryger

+0

Если вы используете classrule, каталог temp не будет очищаться между тестовыми прогонами. – eckes

ответ

0

Я нашел решение. Я объявил, что моя временная папка статична, что вызвало указанную выше проблему.

2

Предполагаете, вы пытаетесь использовать org.junit.rules.TemporaryFolder. Если вы хотите сохранить ту же тестовую папку для всех не-статические методы испытаний вы можете использовать:

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

Просто для справки - ниже синтаксис будет создать новую папку перед каждым @Test метода и очистки после каждого метода выполнение.

@Rule 
public TemporaryFolder outputFolder = new TemporaryFolder();