들어오는 처리 작업을 수행하는 일부 파일의 보관 파일을 관리하는 클래스가 있습니다. 보관 프로세스를 테스트 할 때 JUnit에서 TemporaryFolder 규칙을 사용했습니다. 우리의 일반적인 리눅스 개발 스테이션에junit TemporaryFolderRule로 만든 폴더를 삭제할 수 없습니다.
시험은 일부 Windows는 회원이 팀의 일부를 랩톱에서, 아무 문제없이 실행되지만 내 Mac에서 나는 다음과 같은 치울 :
whenFullExtractReceivedArchivesArePurged (housekeeping.ArchiveHousekeeperIntegrationTest) : 나는 확실하지 않다
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;
}
}
경우 :/var/폴더/PL/PlAbV + EpHhW2-nPFrFrwI ++++ TI/-Tmp-/junit5525189319546810170/secondaryArchive 여기
을 삭제하는 데 실패하면 테스트입니다 오전 어떤 종류의 이상한 허가 문제를 겪고 있거나 그것이 무엇처럼 보입니다. 그 테스트가 폴더를 생성 할 때 난처한 결과를 얻었으므로 폴더에 대한 사용 권한이 있어야하는 것처럼 보입니다.
테스트중인 코드가 제대로 작동하는 것처럼 보일만한 가치가 있습니다. 다른 플랫폼에서는 테스트가 성공적으로 실행됩니다.