Mocking lecture de fichiers / écriture via JUnit

lemoncodes:

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 fileest 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.classun code existant qui ne doit pas être modifié.

Torben:

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 ().

Mocking méthodes statiques avec Mockito

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=211799&siteId=1
conseillé
Classement