У меня есть класс, который управляет архивом некоторых файлов, для которых мы выполняем некоторую входящую обработку. При попытке протестировать процесс архивации я использовал правило TemporaryFolder в JUnit.
На наших обычных станциях разработки Linux тест проходит без проблем, на некоторых ноутбуках с Windows некоторые из членов команды имеют, но на моем Mac я получаю следующее:
whenFullExtractReceivedArchivesArePurged (housekeeping.ArchiveHousekeeperIntegrationTest): не удалось удалить / var / folder / Pl / PlAbV + EpHhW2-nPFrFrwI ++++ TI / -Tmp- / junit552518931954681ive70 100_представления
Вот тест:
package housekeeping;
import static housekeeping.ArchiveHousekeeper.PRIMARY_ARCHIVE;
import static housekeeping.ArchiveHousekeeper.SECONDARY_ARCHIVE;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertThat;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import org.hamcrest.Description;
import org.hamcrest.Factory;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
public class ArchiveHousekeeperIntegrationTest {
private static final String LANDING_FOLDER = "landing";
private static final String PREVIOUS_FILE_NAME = "previousChild.txt";
private static final String CURRENT_FILE_NAME = "currentChild.txt";
private File primaryArchiveFolder;
private File secondaryArchiveFolder;
private File landingFolder;
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Before
public void setUp() throws IOException {
temporaryFolder.getRoot();
primaryArchiveFolder = temporaryFolder.newFolder(PRIMARY_ARCHIVE);
secondaryArchiveFolder = temporaryFolder.newFolder(SECONDARY_ARCHIVE);
landingFolder = temporaryFolder.newFolder(LANDING_FOLDER);
createChildFile(primaryArchiveFolder, CURRENT_FILE_NAME);
createChildFile(secondaryArchiveFolder, PREVIOUS_FILE_NAME);
}
@Test
public void whenFullExtractReceivedArchivesArePurged() throws IOException {
final String extractFileName = "fullExtract0101.zip";
final File extractFile = new File(landingFolder, extractFileName);
extractFile.createNewFile();
final ArchiveHousekeeper housekeeper = new ArchiveHousekeeper(extractFile);
housekeeper.archiveFile();
assertThat(landingFolder.list().length, is(0));
assertThat(primaryArchiveFolder, containsFile(extractFileName));
assertThat(secondaryArchiveFolder, not(containsFile(PREVIOUS_FILE_NAME)));
assertThat(secondaryArchiveFolder, containsFile(CURRENT_FILE_NAME));
assertThat(primaryArchiveFolder, not(containsFile(CURRENT_FILE_NAME)));
}
@Factory
private static Matcher<File> containsFile(final String fileName) {
return new TypeSafeMatcher<File>() {
@Override
public void describeTo(final Description description) {
description.appendText("a directory containing " + fileName);
}
@Override
public boolean matchesSafely(final File item) {
return item != null && item.isDirectory() && Arrays.asList(item.list()).contains(fileName);
}
};
}
private File createChildFile(final File parent, final String child) throws IOException {
final File folder = new File(parent, child);
folder.createNewFile();
return folder;
}
}
Я не уверен, вижу ли я какую-то странную проблему с разрешением или что-то вроде этого. Я просто нахожу это недоумение, так как тест создает папку, поэтому кажется, что она должна иметь разрешения на нее.
Стоит отметить, что тестируемый код действительно работает, на других платформах тест проходит успешно.