Estoy migración de las pruebas unitarias de Junit4 a Junit5. En la prueba de que estoy usando TemporaryFolder
la regla de API Junit4. Para mantener la prueba de trabajo I añadido @EnableRuleMigrationSupport
anotación:
@EnableRuleMigrationSupport
public final class SomeTest {
@Rule
public final TemporaryFolder tmp = new TemporaryFolder();
// tests ...
}
Según tengo entendido, en Junit5 I necesidad de usar extensiones en lugar de reglas , pero no puedo encontrar ningún sustituto TemporaryFolder
en las extensiones Junit5. ¿Existe? Cómo reemplazar correctamente TemporaryFolder
la regla con la extensión?
Puede utilizar la @TempDir
anotación (JUnit 5.4+), se describe en §2.20.1 del JUnit 5 Guía del usuario . A partir de la guía del usuario ( énfasis mío):
El built-in
TempDirectory
de extensión se usa para crear y limpiar un directorio temporal para una prueba individual o todas las pruebas en una clase de prueba. Está registrado por defecto. Para usarlo, anotar un campo no privada del tipojava.nio.file.Path
ojava.io.File
con@TempDir
o añadir un parámetro de tipojava.nio.file.Path
ojava.io.File
anotado con@TempDir
un método de ciclo de vida o método de ensayo.
Nota: se añadió en la versión Esta extensión 5.4
y es actualmente (en 5.5.1
) experimental.
Ejemplo de utilización de un campo de instancia:
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.nio.file.Path; // or use java.io.File
class SomeTests {
@TempDir
Path directory; // must be non-private
}
Ejemplo del uso de un parámetro de un método de ensayo:
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.nio.file.Path; // or use java.io.File
class SomeTests {
@Test
void testFoo(@TempDir Path directory) {
// do test...
}
}
Nota: No se admiten los parámetros del constructor.
Cuando se crea y borra el directorio se describe en el Javadoc de@TempDir
:
Directorio de creación temporal
El directorio temporal sólo se crea si un campo en una clase de prueba o un parámetro en un método método de ciclo de vida o la prueba se anota con
@TempDir
. Si el tipo de campo o parámetro de tipo no es niPath
niFile
o si el directorio temporal no se puede crear, unaExtensionConfigurationException
oParameterResolutionException
serán arrojados en su caso. Además, unaParameterResolutionException
será lanzada para un parámetro constructor anotado con@TempDir
.Directorio temporal Alcance
El alcance del directorio temporal depende de donde la primera
@TempDir
se encontró con la anotación al ejecutar una clase de prueba. El directorio temporal será compartido por todas las pruebas en una clase cuando la anotación está presente en unstatic
campo o en un parámetro de un@BeforeAll
método. De lo contrario - por ejemplo, cuando@TempDir
sólo se utiliza en campos de instancia o en los parámetros de prueba,@BeforeEach
o@AfterEach
métodos - cada prueba hará uso de su propio directorio temporal.Directorio de supresión temporal
Cuando se llega al final del alcance de un directorio temporal, es decir, cuando el método de ensayo o una clase de ejecución tiene acabado, JUnit intentará eliminar de forma recursiva todos los archivos y directorios en el directorio temporal y, por último, el directorio temporal en sí. En caso de eliminación de un archivo o directorio falla, un
IOException
será lanzada que hará que la clase de prueba o prueba falle.