Burlándose de la lectura de archivos / escritura a través de JUnit

lemoncodes:

¿Cómo simulacro de lectura de archivos / escritura a través de JUnit?

Aquí está mi escenario

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

    }
}

Dado anteriormente fuente, Escenario cuando el archivo no se puede escribir (permiso de escritura no permitido) está bien, sin embargo, cuando intento hacer escenario en el que fileno se puede leer (permiso de lectura no permitido). Siempre leer el archivo, ya he intentado modificar el permiso de archivo en el código de prueba a través de abajo

File f = new File("..path/to/file/here");
f.setReadable(false);

Sin embargo, he hecho un poco de lectura, setReadable()siempre devuelve falso (no) cuando se ejecuta en la máquina de Windows.

¿Hay una manera de modificar el permiso de archivo del archivo de destino mediante programación en relación con JUnit?

Nota

Objetivo código fuente a prueba no puede ser modificado, es decir Myhandler.classes un código heredado, que no debe ser modificado.

Torben:

En lugar de depender de los permisos de archivo del sistema operativo, el uso PowerMock para burlarse FileUtils.getFile (...) y hacer que devolver una instancia de archivo (por ejemplo subclase anónima) que devuelve un valor específico para CanWrite () / CanRead ().

Imita métodos estáticos con Mockito

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=211801&siteId=1
Recomendado
Clasificación