2017-10-06 2 views
-4
@Test 
public void test() throws Exception 
{ 
    try 
    { 
     //some code over here 
    } 
    catch(Exception e) 
    { 
     if(e.toString() == null) 
     { 
       System.out.print("Test Case: Successful"); 
     } 
     else 
     { 
       System.out.println("Test Case: Failed"); 
       System.out.println("Failing Reason: "+ e.toString()); 
     } 
    } 
} 

Actuellement, j'ai le code ci-dessus. Cependant, lors de l'exécution de JUnit. Rien n'a été imprimé dans la console.Utilisation de l'instruction try catch pour imprimer des instructions

Ai-je commis une erreur? Ou est-ce que je ne peux pas utiliser System.out.println dans JUnit.

J'ai donc une deuxième question: Est-il possible d'imprimer le temps total nécessaire pour terminer le test JUnit?

+0

Essayez e.printStackTrace au lieu de e.toString et utilisez .length au lieu de == –

+0

Quel type d'objet Exception attrapez-vous? La valeur par défaut 'toString' de' Exception' (héritée de 'Throwable') n'est jamais nulle. – Berger

+0

Pourquoi pensez-vous que vous avez besoin de réinventer ce que JUnit va faire pour vous? Imaginez si vous deviez ajouter ceci à * chaque * cas de test .... et avec ce code, JUnit ne détectera même pas que le test a échoué. –

Répondre

1

Le code dans le bloc catch s'exécutera uniquement si le code du bloc try lève une exception. Comme vous l'avez codé, il ne va pas imprimer quelque chose sauf si une exception est lancer. C'est probablement ce que vous vouliez dire:

@Test 
public void test() throws Exception 
{ 
    try 
    { 
     //some code over here 

     // last line of try block 
     System.out.print("Test Case: Successful"); 
    } 
    catch(Exception e) 
    { 
     System.out.println("Test Case: Failed"); 
     System.out.println("Failing Reason: "+ e.toString()); 
    } 
} 
+0

De quelles façons puis-je afficher le temps total utilisé pour terminer le scénario de test JUnit? –

+0

Bien que le PO ait accepté cela comme un correctif pour le code OP, je recommande fortement de ne pas suivre cette voie. Le framework JUnit gère probablement cela beaucoup mieux. –

5

Ce code n'a pas de sens.

  • Si aucune exception n'est levée, aucune exception n'est levée, donc vous ne finirez pas dans le bloc catch; il n'y a donc pas moyen de vous retrouver dans le cas "réussi" (sauf si vous testez explicitement pour lancer une exception dont getMessage() renvoie null, ce qui est ... hmm, et dans ce cas vous devriez avoir un fail() comme dernière ligne du try)
  • JUnit gère déjà les échecs pour vous. Si votre approche était la "bonne" façon de le faire, vous devez mettre ce code dans chaque cas de test. Quelle quantité de code répété.
  • Si le code dans le bloc try échoue en lançant un Exception, vous attrapez et avalez le problème. Bien sûr, il est imprimé sur la console, mais JUnit n'a aucun moyen de capturer cela, donc il semble que le test passe. (Il échouera toujours correctement si un Error ou un autre Throwable est lancé).

En bref: il suffit de se débarrasser de votre bloc try/catch, laissant le code dans le try, et que le cadre de tests faire exactement ce qu'il est conçu pour.

+0

Parce que je voulais imprimer les résultats dans un fichier texte, de sorte que l'utilisateur peut savoir si le test s'est terminé sans heurt. –

+1

@LanYungLee vous essayez de résoudre ce problème au mauvais endroit. C'est quelque chose que vous voulez résoudre dans le cadre, pas dans les cas de test exécutés par le framework. Sinon, vous allez devoir vous répéter encore et encore - et, pour réitérer, vous brisez les fonctionnalités de JUnit comme ça. –