我正在将 OpenJFX 13 与具有DoubleProperty
如下更新的字段的演示模型一起使用:
public class MyPresentationModel {
private DoubleProperty batteryLevel = new SimpleDoubleProperty<>(100.0);
public void setBatteryLevel(double value) {
Platform.runLater( () ->
batteryLevel.setValue(value) );
}
}
之所以Platform.runLater
需要,是因为可以从任何线程调用 setter。
如果我现在想测试这是一个简单的单元测试(使用带有 AssertJ 的 JUnit 5),测试会失败,因为 JavaFX 工具包没有初始化。
没问题,我将 TestFX 添加到我的项目中并将测试更新为:
@ExtendWith(ApplicationExtension.class)
class MyPresentationModelTest {
@Test
void test() {
MyPresentationModel pm = new MyPresentationModel();
pm.setBatteryLevel(75.0);
assertThat(pm.batteryLevelProperty().get()).isCloseTo(75.0, Offset.offset(0.1));
}
}
结果:
java.lang.AssertionError:
Expecting:
<100.0>
to be close to:
<75.0>
by less than <0.1> but difference was <25.0>.
(a difference of exactly <0.1> being considered valid)
鉴于更新是在 JavaFx 线程上完成的,这是合乎逻辑的。
那么如何等到 JavaFx 线程更新了属性,以便我可以断言该值?