Использование временных папок JUnit и проверка существования файла при выходе из системы

У меня есть такой тестовый модуль, используя

org.junit.contrib.java.lang.system.ExpectedSystemExit

org.junit.rules.TemporaryFolder

@Rule
public TemporaryFolder folder = new TemporaryFolder();

@Rule
public final ExpectedSystemExit exit = ExpectedSystemExit.none();


@Test
public void createsFile_integrationTest() throws Exception{

    final File tempFolder = folder.newFolder("temp");

    exit.expectSystemExitWithStatus(0);
    exit.checkAssertionAfterwards(new Assertion() {

        @Override
        public void checkAssertion() throws Exception {
            assertTrue(new File(tempFolder.getAbsolutePath() + "/created-file.txt").exists());

        }

     main.run(tempFolder.getAbsolutePath() +"/created-file.txt"); 

    });

Проблема в том, что временная папка начинает разрушаться, как только она выходит из системы, а не после моей checkAssertion() называется.

Есть ли способ предотвратить разрушение моей временной папки до конца checkAssertion?

Изменить: я думаю, что ответ - это сделать рефакторинг и разделить их на два теста - один, где я тестирую выход из системы, а другой, где я тестирую создание файла.

1 ответ

Вы должны навести порядок на правилах, чтобы ExpectedSystemExit правило может проверить утверждение раньше TemporaryFolder отключение Для этого вы можете использовать RuleChain от JUnit.

private final TemporaryFolder folder = new TemporaryFolder();
private final ExpectedSystemExit exit = ExpectedSystemExit.none();

@Rule
public TestRule chain = RuleChain.outerRule(folder).around(exit);

@Test
public void createsFile_integrationTest() throws Exception {

    final File tempFolder = folder.newFolder("temp");

    exit.expectSystemExitWithStatus(0);
    exit.checkAssertionAfterwards(new Assertion() {

        @Override
        public void checkAssertion() throws Exception {
            assertTrue(new File(tempFolder.getAbsolutePath() + "/created-file.txt").exists());

        }
    });

    main.run(tempFolder.getAbsolutePath() +"/created-file.txt"); 

}
Другие вопросы по тегам