Использование временных папок 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");
}