web-dev-qa-db-fra.com

Comment vérifier qu'une exception n'est pas levée avec mockito?

J'ai une méthode simple Java, je voudrais vérifier qu'elle ne jette aucune exceptions

Je me suis déjà moqué des paramètres, etc. Cependant, je ne sais pas comment utiliser Mockito pour vérifier qu'aucune exception n'a été levée à partir de la méthode

Code de test actuel:

  @Test
  public void testGetBalanceForPerson() {

   //creating mock person
   Person person1 = mock(Person.class);
   when(person1.getId()).thenReturn("mockedId");

  //calling method under test
  myClass.getBalanceForPerson(person1);

  //How to check that an exception isn't thrown?


}
10
java123999

Échec du test si une exception est interceptée.

@Test
  public void testGetBalanceForPerson() {

   //creating mock person
   Person person1 = mock(Person.class);
   when(person1.getId()).thenReturn("mockedId");

  //calling method under test
   try{
        myClass.getBalanceForPerson(person1);

   }
   catch(Exception e){
      fail("Should not have thrown any exception");
   }
}
16
UserF40

Tant que vous n'indiquez pas explicitement que vous attendez une exception, JUnit échouera automatiquement à tous les tests ayant généré des exceptions non capturées. 

Par exemple, le test suivant échouera:

@Test
public void exampleTest(){
    throw new RuntimeException();
}

Si vous souhaitez également vérifier que le test échouera sur Exception, vous pouvez simplement ajouter un throw new RuntimeException(); dans la méthode que vous souhaitez tester, exécuter vos tests et vérifier s'ils ont échoué.

Lorsque vous n'acceptez pas l'exception et que vous échouez au test, JUnit inclut la trace de pile complète dans le message d'échec, ce qui vous permet de trouver rapidement la source de l'exception.

5
125_m_125

Utiliser Assertions.assertThatThrownBy (). IsInstanceOf () deux fois, comme indiqué ci-dessous, servirait cet objectif!

import org.assertj.core.api.Assertions;
import org.junit.Test;

public class AssertionExample {

    @Test
    public void testNoException(){
        assertNoException();
    }



    private void assertException(){
        Assertions.assertThatThrownBy(this::doNotThrowException).isInstanceOf(Exception.class);
    }

    private void assertNoException(){
        Assertions.assertThatThrownBy(() -> assertException()).isInstanceOf(AssertionError.class);
    }

    private void doNotThrowException(){
        //This method will never throw exception
    }
}
0
MLS