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); } } }
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!