2010-10-09 4 views
4

Je suis nouveau pour tester avec JUnit et j'ai besoin d'un indice pour tester les exceptions.Test des exceptions à l'aide de JUnit. Le test échoue même si l'exception est interceptée

J'ai une méthode simple qui jette une exception si elle obtient une chaîne d'entrée vide:

public SumarniVzorec(String sumarniVzorec) throws IOException 
    { 
     if (sumarniVzorec == "") 
     { 
      IOException emptyString = new IOException("The input string is empty"); 
      throw emptyString; 
     } 

Je veux vérifier que l'exception est en fait levée si l'argument est une chaîne vide. Pour cela, j'utilise le code suivant:

@Test(expected=IOException.class) 
    public void testEmptyString() 
    { 
     try 
     { 
      SumarniVzorec test = new SumarniVzorec(""); 
     } 
     catch (IOException e) 
     { // Error 
      e.printStackTrace(); 
     } 

Le résultat est que l'exception est levée, mais le test échoue. Qu'est-ce qui me manque?

Merci, Tomas

Répondre

13

Retirer le bloc try-catch. JUnit recevra une exception et la traitera de manière appropriée (pensez que le test a réussi, en fonction de votre annotation). Et si vous supprimez une exception, il n'y a aucun moyen de savoir si JUnit a été lancé.

@Test(expected=IOException.class) 
public void testEmptyString() throws IOException { 
    new SumarniVzorec(""); 
} 

En outre, dr jerry souligne à juste titre que vous ne pouvez pas comparer les chaînes avec l'opérateur ==. Utilisez equals méthode (ou string.length == 0)

http://junit.sourceforge.net/doc/cookbook/cookbook.htm (voir la partie 'Exceptions prévues')

+1

Remerciez vous, mais j'ai déjà essayé et cela donne une erreur: non gérée Type d'exception IOError –

+2

Vous devez toujours déclarer la méthode comme 'throws IOException' – developmentalinsanity

+0

@Tomas d'où obtenez-vous IOError? Pouvez-vous poster un message d'erreur complet (avec stacktrace)? –

1

peut-être sumarniVzorec.equals ("") au lieu de sumarniVzorec == ""

+0

Merci, j'ai réparé cela, mais cela n'a pas résolu le problème mentionné ci-dessus. –

0

Que diriez-vous:

@Test 
public void testEmptyString() 
{ 
    try 
    { 
     SumarniVzorec test = new SumarniVzorec(""); 
     org.junit.Assert.fail(); 
    } 
    catch (IOException e) 
    { // Error 
     e.printStackTrace(); 
    } 
0

Une autre façon de faire est la suivante:

public void testEmptyString() 
{ 
    try 
    { 
     SumarniVzorec test = new SumarniVzorec(""); 
     assertTrue(false); 

    } 
    catch (IOException e) 
    { 
     assertTrue(true); 
    } 
Questions connexes