Comment avez-vous le fichier maquette de lecture / écriture via JUnit?
Voici mon scénario
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();
}
}
Compte tenu de la source ci - dessus, le scénario lorsque le fichier est en lecture seule (autorisation d'écriture non autorisée) est OK, mais lorsque je tente de faire le scénario dans lequel file
est illisible (autorisation de lecture non autorisée). Il lit toujours le fichier, je l' ai déjà essayé de modifier l'autorisation de fichier sur le code de test via ci - dessous
File f = new File("..path/to/file/here");
f.setReadable(false);
Cependant, je l' ai fait un peu de lecture, setReadable()
renvoie toujours faux (échec) lorsqu'il est exécuté sur machine Windows.
Est-il possible de modifier l'autorisation de fichier du fichier cible par programme par rapport à JUnit?
Remarque
Code source cible test ne peut pas être modifié, ce qui signifie
Myhandler.class
un code existant qui ne doit pas être modifié.
Au lieu de compter sur les autorisations de fichiers du système d'exploitation, l'utilisation PowerMock pour se moquer FileUtils.getFile (...) et le faire revenir une instance de fichier (par exemple sous-classe anonyme) qui retourne une valeur spécifique pour canWrite () / canRead ().