webentwicklung-frage-antwort-db.com.de

Wie kann ich überprüfen, dass keine Ausnahme mit mockito ausgelöst wird?

Ich habe eine einfache Java-Methode, ich möchte überprüfen, dass keine exceptions ausgegeben wird. 

Ich habe die Parameter usw. bereits verspottet, aber ich bin nicht sicher, wie Sie mit Mockito testen, ob von der Methode keine Ausnahme ausgelöst wurde.

Aktueller Testcode:

  @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

Den Test nicht bestehen, wenn eine Ausnahme abgefangen wird.

@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

Solange Sie nicht ausdrücklich angeben, dass Sie eine Ausnahme erwarten, schlägt JUnit automatisch alle Tests fehl, die nicht erfasste Ausnahmen ausgelöst haben. 

Zum Beispiel schlägt der folgende Test fehl:

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

Wenn Sie weiterhin prüfen möchten, ob der Test bei Exception fehlgeschlagen ist, können Sie der zu testenden Methode einfach eine throw new RuntimeException(); hinzufügen, die Tests ausführen und prüfen, ob sie fehlgeschlagen sind.

Wenn Sie die Ausnahme nicht manuell abfangen und den Test nicht bestehen, fügt JUnit die vollständige Stack-Ablaufverfolgung in die Fehlernachricht ein, sodass Sie die Quelle der Ausnahme schnell finden können.

5
125_m_125

Die Verwendung von Assertions.assertThatThrownBy (). IsInstanceOf () zweimal, wie unten gezeigt, würde dem Zweck dienen!

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