Maison > Java > javaDidacticiel > Comment tester les méthodes qui appellent « System.exit() » dans JUnit ?

Comment tester les méthodes qui appellent « System.exit() » dans JUnit ?

Barbara Streisand
Libérer: 2024-11-22 10:17:10
original
712 Les gens l'ont consulté

How to Test Methods that Call `System.exit()` in JUnit?

Comment tester les méthodes qui appellent System.exit() ?

Problème :

Les méthodes de test qui appellent System.exit() peuvent être difficiles car JUnit se termine lorsque System.exit() est invoqué.

Solution :

Il existe plusieurs approches pour résoudre ce problème :

1. Évitez d'utiliser System.exit() :

Au lieu d'utiliser System.exit(), envisagez de déclencher une exception non vérifiée. Cela permet à JUnit d'intercepter l'exception et de signaler les échecs de test sans mettre fin à la JVM.

2. Empêchez System.exit() de quitter la JVM :

Employez un gestionnaire de sécurité qui empêche les appels à System.exit(). Ceci peut être réalisé en créant une classe de gestionnaire de sécurité personnalisée et en modifiant le scénario de test pour qu'il s'exécute avec.

3. Utiliser les règles système (JUnit 4.9) :

Utilisez la règle ExpectedSystemExit pour vérifier que System.exit() est appelé et tester l'état de sortie. Cette règle fournit un moyen pratique de gérer System.exit() dans les tests.

4. Définir la propriété système (Java 21) :

Pour empêcher la JVM de s'arrêter en raison de System.exit(), définissez la propriété système -Djava.security.manager=allow.

Exemple de code utilisant Security Manager :

public class NoExitTestCase extends TestCase {

    protected static class ExitException extends SecurityException {
        public final int status;
        public ExitException(int status) {
            super("There is no escape!");
            this.status = status;
        }
    }

    private static class NoExitSecurityManager extends SecurityManager {
        @Override
        public void checkExit(int status) {
            super.checkExit(status);
            throw new ExitException(status);
        }
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        System.setSecurityManager(new NoExitSecurityManager());
    }

    @Override
    protected void tearDown() throws Exception {
        System.setSecurityManager(null);
        super.tearDown();
    }

    public void testExit() throws Exception {
        try {
            System.exit(42);
        } catch (ExitException e) {
            assertEquals("Exit status", 42, e.status);
        }
    }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal