如何对JavaFx属性绑定进行单元测试?

时间:2019-09-10 15:22:34

标签: java javafx testfx

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

0 个答案:

没有答案
相关问题