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?
}
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");
}
}
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.
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
}
}