So überprüfen Sie, ob eine Ausnahme in einem Junit-Test-Worker-Thread ausgelöst wird
Posted: 20 Dec 2024, 22:59
Ich habe versucht, mit einem JavaFX ChangeListener eine Ausnahme auszulösen, wenn eine JavaFX-Eigenschaft durch eine Bindung auf einen ungültigen Wert gesetzt wird. Das ist vielleicht nicht der richtige Weg, um mein Ziel zu erreichen, aber jetzt bin ich neugierig: Ich konnte dieses Verhalten mit Junit5 nicht testen. Unten finden Sie ein minimales Arbeitsbeispiel meines Versuchs.
class PropertyValueLimiterTest {
@Test
void bind_invalidValue_MWE(){
Set allowedValues = Set.of("foo", "bar");
Property property = new SimpleObjectProperty("foo");
ChangeListener listener = (observable, oldValue, newValue) -> {
if(! allowedValues.contains(newValue)){
throw new IllegalArgumentException();
}
};
property.addListener(listener);
Assertions.assertThrows(IllegalArgumentException.class,
() -> property.setValue("invalid"));
}
}
Wenn ich diesen Code ausführe, passieren zwei Dinge:
class PropertyValueLimiterTest {
@Test
void bind_invalidValue_MWE(){
Set allowedValues = Set.of("foo", "bar");
Property property = new SimpleObjectProperty("foo");
ChangeListener listener = (observable, oldValue, newValue) -> {
if(! allowedValues.contains(newValue)){
throw new IllegalArgumentException();
}
};
property.addListener(listener);
Assertions.assertThrows(IllegalArgumentException.class,
() -> property.setValue("invalid"));
}
}
Wenn ich diesen Code ausführe, passieren zwei Dinge:
- Der Test schlägt fehl, weil die erwartete Ausnahme nicht ausgelöst wird;
- Junit5 teilt mir mit, dass eine Ausnahme ausgelöst wurde, die der von mir erwarteten entspricht: Exception in thread „Test worker“ java.lang.IllegalArgumentException.