java junit junit-rule

java - JUnit Rule TemporaryFolder



junit-rule (2)

Esto funciona también. EDITAR si en el método @Before parece que myfolder.create () necesita llamarse. Y esta es probablemente una mala práctica ya que el javadoc dice que no llame a TemporaryFolder.create (). 2nd Edit Parece que debe llamar al método para crear los directorios temporales si no los quiere en los métodos @Test. También asegúrese de cerrar todos los archivos que abra en el directorio temporal o no se eliminarán automáticamente.

<imports excluded> public class MyTest { @Rule public TemporaryFolder myfolder = new TemporaryFolder(); private File otherFolder; private File normalFolder; private File file; public void createDirs() throws Exception { File tempFolder = myfolder.newFolder("folder"); File normalFolder = new File(tempFolder, "normal"); normalFolder.mkdir(); File file = new File(normalFolder, "file.txt"); PrintWriter out = new PrintWriter(file); out.println("hello world"); out.flush(); out.close(); } @Test public void testSomething() { createDirs(); .... } }

Estoy creando una @Rule TemporaryFolder usando la anotación @Rule en JUnit 4.7. Intenté crear una nueva carpeta que sea hija de la carpeta temp usando tempFolder.newFolder("someFolder") en el @Before (setup) de mi prueba. Parece que la carpeta temporal se inicializa después de que se ejecuta el método de instalación, lo que significa que no puedo usar la carpeta temporal en el método de instalación. ¿Es este comportamiento correcto (y predecible)?


Este es un problema en Junit 4.7. Si actualiza un Junit más nuevo (por ejemplo, 4.8.1), todos los @Rule se ejecutarán cuando ingrese el método @Before: s. Un informe de error relacionado es este: https://github.com/junit-team/junit4/issues/79