Comment se débarrasser de la règle TemporaryFolder dans Junit5

Kirill:

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' @EnableRuleMigrationSupportannotation:

@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 TemporaryFolderdans les extensions Junit5. Existe t - il? Comment remplacer correctement la TemporaryFolderrègle avec l' extension?

Slaw:

Vous pouvez utiliser l' @TempDirannotation (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- TempDirectoryextension 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 type java.nio.file.Pathou java.io.Fileavec @TempDirou ajouter un paramètre de type java.nio.file.Pathou java.io.Fileannoté avec @TempDirune méthode du cycle de vie ou méthode d'essai.

Note: Cette extension a été ajouté dans la version 5.4et 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 , Pathni , Fileou si le répertoire temporaire ne peut pas être créé, un ExtensionConfigurationExceptionou ParameterResolutionExceptionsera lancé , selon le cas. De plus, ParameterResolutionExceptionsera 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 @TempDirannotation 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 un staticchamp ou sur un paramètre d'une @BeforeAllméthode. Dans le cas contraire - par exemple, lorsque @TempDirn'est utilisé sur les champs d'instance ou sur les paramètres de test, @BeforeEachou @AfterEachmé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 IOExceptionsera lancé qui provoquera la classe de test ou échec du test.

Je suppose que tu aimes

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