web-dev-qa-db-fra.com

Comment faire échouer un cas de test Junit s'il y a une exception dans le code?

J'ai écrit un test Junit pour tester à l'unité mon code. Je veux que mon scénario de test Junit échoue lorsque j'obtiens une exception dans mon code. J'ai essayé d'utiliser une instruction assert, mais même lorsque j'obtiens une exception dans mon code, mon scénario de test Junit passe. S'il vous plaît, quelqu'un peut-il me dire comment je peux y parvenir? Merci.

9
Rishi Arora

Vous pouvez affirmer qu'une variable globale "excepted" = null ou quelque chose comme ça et l'initialiser pour égaler une chaîne d'informations dans le bloc catch.

0
kpie

Je vous recommande fortement de ne tester que vos fonctionnalités. Si une exception est levée, le test échoue automatiquement. Si aucune exception n'est levée, vos tests deviendront tous verts.

Mais si vous voulez toujours écrire le code de test qui devrait échouer en cas d'exceptions, faites quelque chose comme: -

@Test
public void foo(){
   try{
      //execute code that you expect not to throw Exceptions.
   }
   catch(Exception e){
      fail("Should not have thrown any exception");
   }
}
21
Vinay

En fait, votre test devrait échouer lorsqu'une exception dans le code est levée. Bien sûr, si vous interceptez cette exception et que vous ne la lancez pas (ou toute autre exception) plus loin, test ne le saura pas. Dans ce cas, vous devez vérifier le résultat de l'exécution de la méthode. Exemple de test:

@Test
public void test(){
  testClass.test();
}

Méthode qui échouera au test:

public void test(){
  throw new RuntimeException();
}

Méthode qui n'échouera pas au test

public void test(){
  try{
    throw new RuntimeException();
  } catch(Exception e){
    //log
  }
}
6
Sergii Bishyr

Les deux tests suivants échoueront sans codage supplémentaire:

@Test
public void fail1() {
    throw new NullPointerException("Will fail");
}

@Test
public void fail2() throw IOException {
    throw new IOException("Will fail");
}
2
Thomas Kläger

Dans JUnit 4, vous pouvez explicitement affirmer qu'un @Test doit échouer avec une exception donnée en utilisant la propriété expected de @Test annotation:

  @Test(expected = NullPointerException.class)
  public void expectNPE {
     String s = null;
     s.toString();
  }

Voir documentation JUnit4 dessus .

0
mcalmeida