2010-08-27 6 views
-2

Le code suivant ne compile pas, car il est inaccessible.JUnit4 et la gestion des exceptions

Je veux écrire la fonction "tues" et l'appeler dans de nombreuses autres fonctions de test unitaire.

Est-ce possible et comment l'implémenter?

private void catchException(boolean condition) { 
     try 
     { 
      assertTrue(condition); 
     } 
     catch (SomeException e) 
     { 
      fail("exception = " + e.getMessage()); 
     } 
} 

Merci!

+3

Qu'essayez-vous exactement d'accomplir? – tobiasbayer

+0

Non, pas dans sa forme actuelle. Qu'est-ce que vous essayez d'accomplir? – mikek

+0

Qu'est-ce qu'une fonction "tues"? Qu'est-ce que cela a à voir avec un bloc catch inaccessible? Je ne comprends pas la question du tout. –

Répondre

0

La modification SomeException par Exception entraînera la compilation du code.

2

Le problème avec votre code est que assertTrue ne lance pas SomeException, si vous le remplacez par la fonction qui le fait, il compilera.

2

Je ne suis pas tout à fait sûr de ce que vous demandez ici, mais il y a quelques problèmes avec le code que vous avez publié.

Vous ne pouvez avoir un bloc catch pour une exception cochée que si le code dans l'essai peut potentiellement déclencher une exception du même type que vous attrapez. Puisque les exceptions vérifiées doivent être déclarées dans la clause throws d'une méthode, vous pouvez vérifier si l'une des méthodes que vous appelez lance les types d'exceptions que vous attrapez. De la documentation sur JUnit assertTrue:

public static void assertTrue(boolean condition) 

Vous pouvez le voir ne jette pas d'exceptions vérifiées. De même, appeler le fail() dans un bloc catch dans un test JUnit n'est pas vraiment nécessaire. Un test unitaire échouera automatiquement si une exception non interceptée est générée.

+0

Merci pour votre réponse. Je sais que je devrais écrire l'exception int catch block et c'est pourquoi cette fonction ne peut pas fonctionner. J'appelle fail() parce que si je ne fais pas ça, pass test unit. – coban

+2

@ coban22, non, les exceptions non interceptées provoqueront l'échec d'un test JUnit: http://junit.sourceforge.net/doc/faq/faq.htm#tests_8 ajoutez-le simplement à la clause 'throws' de la méthode de test afin que votre compile de code. –

1

Ajoutez simplement throws WhateverException à votre signature de test et le test échouera si une exception est levée.

4

Il est nul besoin d'attraper une exception dans une méthode d'essai pour l'échouer:

public Object methodUnderTest() throws SomeException { 
    ... 
} 

@Test 
public void testMethod() throws SomeException() { 
     Object obj = methodUnderTest(); 
     assert... 
} 

Si SomeException est lancée par methodUnderTest(), testMethod() échouera.

1

Il n'est pas vraiment clair ce que vous devez réaliser avec votre code. Si vous voulez avoir un message bien formaté à l'exception tirée par jUnit si votre assert il ne parvient alors envisager d'écrire de cette façon:

assertTrue("Condition should hold because....", conditionToCheck); 

De cette façon jUnit imprimera le message que vous avez fourni si la vérification échoue. Je recommande fortement ce, surtout si vous avez beaucoup de tests, car il

  • vous aide à identifier rapidement le problème
  • aide votre membre de l'équipe à comprendre le but de votre assert
-1

Il est évident que ma question n'est pas clair.

J'ai beaucoup de tests unitaires et toutes les méthodes lancent la même exception avec un message d'erreur différent. "SomeException" est une exception que je dois attraper et lire un message d'erreur.Ce que je veux faire est d'écrire une méthode qui sera commune à tous les tests unitaires et où je pourrais imprimer un message d'erreur.

maintenant des tests unitaires ressemble à ce

public void test_something() 
    {  
     try 
     { 
      assertTrue(bw.doSomething("test")); 
     } 
     catch (SomeException e) 
     { 
      fail("exception = " + e.getReason()); 
     } 
    } 

public void test_something1() 
    { 
     IBroadworks bw = getSomehting1(); 
     try 
     { 
      assertTrue(bw.doSomething1("test1")); 
     } 
     catch (SomeException e) 
     { 
      fail("exception = " + e.getReason()); 
     } 
    } 
... 

donc ci-dessous le code est répété dans tous les tests unitaires et qui ne sont pas ok.

... 
try{ 
assertTrue(condition); 
} 

catch (SomeException e) 
     { 
      fail("exception = " + e.getReason()); 
     } 
...