Java: Comment les méthodes de test que le Système d'appel.exit()?

J'ai quelques méthodes qui doivent appeler System.exit() sur certains intrants. Malheureusement, le test de ces cas, les causes de JUnit pour mettre fin à! Mettre les appels de méthode dans un nouveau Thread ne semble pas aider, car System.exit() met fin à la JVM, et pas seulement le thread courant. Existe-il des modèles communs pour faire face à cela? Par exemple, je peux substituer un stub pour System.exit()?

[MODIFIER] La classe en question est en fait un outil de ligne de commande qui je suis tenté de tester à l'intérieur de JUnit. Peut-être JUnit est tout simplement pas le bon outil pour le travail? Des Suggestions pour des tests de régression outils sont les bienvenus (de préférence quelque chose qui s'intègre bien avec JUnit et EclEmma).

  • Je suis curieux de savoir pourquoi une fonction serait jamais appel Système.exit()...
  • Si vous appelez une fonction qui quitte l'application. Par exemple, si l'utilisateur tente d'effectuer une tâche qu'ils ne sont pas autorisés à effectuer de plus de x fois dans une ligne, vous avez la force de les sortir de l'application.
  • Je continue de penser que, dans ce cas, il devrait y avoir une plus belle façon de revenir à partir de l'application plutôt que de Système.exit().
  • Si vous faites des tests de main(), alors il est parfaitement logique de Système d'appel.exit(). Nous avons une exigence que sur l'erreur d'un processus de traitement par lots, sortir avec 1 et sur le succès de la sortie à 0.
  • Je suis en désaccord avec tout le monde qui dit System.exit() est mauvais - votre programme doit échouer rapidement. Lancer une exception purement prolonge une application dans un état non valide dans les situations où un développeur veut quitter et de se donner de faux messages d'erreur.
InformationsquelleAutor Chris Conway | 2008-11-21