Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Evtl. fehlt dir noch etwas das generelle Verständnis von Unit Tests. Generell hast Du immer den gleichen Aufbau:
1. Prepare Test - Hier wird dann vorbereitet, was getestet werden soll.
2. Action - hier kommt der Aufruf, der getestet werden soll.
3. Test - das Ergebnis wird getestet.
Das testen, dass eine Exception geworfen wird, kann man mit assertThrows testen:
Junit 5 expected exception example. The assertThrows() asserts that execution of the supplied expression throws an exception of expected Type.
howtodoinjava.com
Bei deinem konkreten Fall haben wir aber schlicht keine Methode zum Testen. Du hast ja keine Details der Methode sondern nur den Methodenkopf mit nicht übersetzbarem Inhalt.
Die gesuchte Person muss ja irgendwo her kommen. Machen wir einfach ein kleines Beispiel:
Erst einmal bauen wir uns ein kleines PersonRepository. Ich habe mal eine minimale innere Klasse Person eingebaut, die natürlich separat wäre.
Und das Repository sucht die Person nur aus einer List.
Java:
import java.util.List;
import java.util.Objects;
public class PersonRepository {
public static class Person {
public String name;
}
private List<Person> persons;
public PersonRepository(final List<Person> persons) {
this.persons = persons;
}
public Person findPerson(final String name) throws Exception {
return persons.stream()
.filter(p -> Objects.equals(p.name, name))
.findFirst().orElseThrow(() -> new Exception("Person not found!"));
}
}
Jetzt kann man das Testen. Der Vorteil hier ist, dass man einfach im Konstruktor eine List übergeben kann als Initialisierung. Wenn dies aus einer anderen Quelle käme, dann würde man das entsprechend einbauen und dann im Test vermutlich mit Mocking arbeiten.
Damit kann ein Test relativ einfach aussehen:
Java:
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertThrows;
public class PersonRepositoryTests {
@Test
public void testPersonNotfound() {
// Vorbereitung: Repository, das keine Personen enthält.
PersonRepository repository = new PersonRepository(List.of());
// Durchführung & Test - bei Exceptions nicht trennbar.
assertThrows(Exception.class, () -> repository.findPerson("nobody"));
}
}
Hallo Konrad und vielen Dank für die tolle Erklärung. Es wäre noch besser, wenn du mir ein paar Infos für die Ropository noch gibst. Ich meine die Theorie, wann man die braucht usw.
Das ist doch einfach die Klasse, in der die findPerson Methode ist. Eine Klasse Methode kann in Java ja nicht einfach so existieren - sie braucht eine Klasse um sich. Und die Methode findPerson braucht etwas, worin nach der Person gesucht werden soll.