Je migration des tests unitaires de junit4 à Junit5. Dans le test que je utilise la TemporaryFolder
règle de l' API junit4. Pour garder le test de travail I a ajouté l' @EnableRuleMigrationSupport
annotation:
@EnableRuleMigrationSupport
public final class SomeTest {
@Rule
public final TemporaryFolder tmp = new TemporaryFolder();
// tests ...
}
Si je comprends bien, dans Junit5 je besoin d'utiliser des extensions au lieu de règles , mais je ne peux trouver aucun remplacement pour TemporaryFolder
dans les extensions Junit5. Existe t - il? Comment remplacer correctement la TemporaryFolder
règle avec l' extension?
Vous pouvez utiliser l' @TempDir
annotation (JUnit 5.4+), décrit dans §2.20.1 du JUnit 5 Guide de l' utilisateur . À partir du guide de l' utilisateur ( l' accent mien):
Le haut-
TempDirectory
extension est utilisée pour créer et nettoyer un répertoire temporaire pour un test individuel ou tous les tests dans une classe de test. Il est enregistré par défaut. Pour l' utiliser, annoter un champ non-privé de typejava.nio.file.Path
oujava.io.File
avec@TempDir
ou ajouter un paramètre de typejava.nio.file.Path
oujava.io.File
annoté avec@TempDir
une méthode du cycle de vie ou méthode d'essai.
Note: Cette extension a été ajouté dans la version 5.4
et est actuellement (en 5.5.1
) expérimentale.
Exemple d'utilisation d'un champ d'instance:
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
}
Exemple d'utilisation d'un paramètre d'une méthode d'essai:
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...
}
}
Remarque: Les paramètres ne sont pas pris en charge Constructor.
Lorsque le répertoire est créé et supprimé est décrit dans la Javadoc de@TempDir
:
Répertoire temporaire Création
Le répertoire temporaire est créé uniquement si un champ dans une classe de test ou d' un paramètre dans une méthode de méthode du cycle de vie ou le test est annotés avec
@TempDir
. Si le type de type de champ ou d'un paramètre est ni ,Path
ni ,File
ou si le répertoire temporaire ne peut pas être créé, unExtensionConfigurationException
ouParameterResolutionException
sera lancé , selon le cas. De plus,ParameterResolutionException
sera lancé pour un paramètre constructeur annotée avec@TempDir
.Champ d'application temporaire Répertoire
La portée du répertoire temporaire dépend de l' endroit où la première
@TempDir
annotation est rencontrée lors de l' exécution d' une classe de test. Le répertoire temporaire sera partagé par tous les tests dans une classe lorsque l'annotation est présente sur unstatic
champ ou sur un paramètre d'une@BeforeAll
méthode. Dans le cas contraire - par exemple, lorsque@TempDir
n'est utilisé sur les champs d'instance ou sur les paramètres de test,@BeforeEach
ou@AfterEach
méthodes - chaque test utilisera son propre répertoire temporaire.Répertoire temporaire Suppression
Lorsque la fin de la portée d'un répertoire temporaire est atteint, à savoir lorsque la méthode d'essai ou de la classe a l' exécution terminée, JUnit tentera de supprimer récursivement tous les fichiers et répertoires dans le répertoire temporaire et, enfin, le répertoire temporaire lui - même. Dans suppression de cas d'un fichier ou un répertoire échoue, un
IOException
sera lancé qui provoquera la classe de test ou échec du test.