441 votes

Comment tester qu'aucune exception n'est levée ?

Je sais qu'une façon de le faire serait :

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

Existe-t-il un moyen plus propre de procéder ? (Probablement en utilisant la fonction @Rule ?)

14 votes

Un test JUnit est considéré comme ayant échoué s'il lève une exception autre qu'une exception attendue. En général, aucune exception n'est attendue.

2 votes

N'y a-t-il pas une distinction entre échec et erreur dans JUnit ? Le premier signifie que le test a échoué, le second que quelque chose d'inattendu s'est produit.

2 votes

0voto

LazerBanana Points 2161

Vous pouvez vous attendre à ce que l'exception ne soit pas levée en créant une règle.

@Rule
public ExpectedException expectedException = ExpectedException.none();

0voto

Crenguta S Points 375

Vous pouvez le faire en utilisant une @Rule puis en appelant la méthode reportMissingExceptionWithMessage comme indiqué ci-dessous : Ceci est du code Scala.

enter image description here

0voto

Je suis tombé sur ce problème après avoir créé des méthodes génériques telles que

@Test
void testSomething() {
   checkGeneric(anComplexObect)
}

Sur https://newbedev.com/sonarqube-issue-add-at-least-one-assertion-to-this-test-case-for-unit-test-with-assertions quelques trucs d'annotation sont proposés.

La solution est beaucoup plus simple. Il suffit de renommer la méthode "checkGeneric" en "assertGeneric".

@Test
void testSomething() {
  assertGeneric(anComplexObect)
}

-2voto

Rocky Inde Points 152

Ce qui suit échoue le test pour toutes les exceptions, cochées ou non :

@Test
public void testMyCode() {

    try {
        runMyTestCode();
    } catch (Throwable t) {
        throw new Error("fail!");
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X