我将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
是必需的,因为可以从任何线程调用设置器。
如果我现在想测试这是一个简单的单元测试(将JUnit 5与AssertJ一起使用),则测试会失败,因为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线程更新属性,以便可以断言该值?