2

我正在将 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 线程更新了属性,以便我可以断言该值?

4

0 回答 0