Как вы издеваетесь над чтением / записью файлов через JUnit?
Вот мой сценарий
MyHandler.java
public abstract class MyHandler {
private String path = //..path/to/file/here
public synchronized void writeToFile(String infoText) {
// Some processing
// Writing to File Here
File file = FileUtils.getFile(filepath);
file.createNewFile();
// file can't be written, throw FileWriteException
if (file.canWrite()) {
FileUtils.writeByteArrayToFile(file, infoText.getBytes(Charsets.UTF_8));
} else {
throw new FileWriteException();
}
}
public String readFromFile() {
// Reading from File here
String infoText = "";
File file = new File(path);
// file can't be read, throw FileReadException
if (file.canRead()) {
infoText = FileUtils.readFileToString(file, Charsets.UTF_8);
} else {
throw FileReadException();
}
return infoText
}
}
MyHandlerTest.java
@RunWith(PowerMockRunner.class)
@PrepareForTest({
MyHandler.class
})
public class MyHandlerTest {
private static MyHandler handler = null;
// Some Initialization for JUnit (i.e @Before, @BeforeClass, @After, etc)
@Test(expected = FileWriteException.class)
public void writeFileTest() throws Exception {
handler.writeToFile("Test Write!");
}
@Test(expected = FileReadException.class)
public void readFileTest() throws Exception {
handler.readFromFile();
}
}
Приведенный выше источник, Сценарий, когда файл недоступен для записи (разрешение на запись не разрешено), в порядке, однако, когда я пытаюсь создать сценарий, в котором file
не читаем (разрешение на чтение не разрешено).Он всегда читает файл, я уже пытался изменить разрешение файла в тестовом коде с помощью ниже
File f = new File("..path/to/file/here");
f.setReadable(false);
Тем не менее, я сделал некоторые чтения, setReadable()
всегда возвращает false (сбой) при запуске в Windowsмашина.
Есть ли способ изменить разрешение файла целевого файла программно по отношению к JUnit?
Примечание
Целевой исходный кодтест не может быть изменен, то есть Myhandler.class
является устаревшим кодом, который не подлежит изменению.