使用JavaFx和TestFx进行无头测试

时间:2014-12-10 14:23:44

标签: unit-testing javafx javafx-8 testfx

我有一个简单的JavaFx应用程序(Java 8),它使用TestFx进行单元测试。但是,运行测试时,应用程序窗口会启动并移动鼠标以执行我的测试中的任何操作。这些测试是否可以以不弹出应用程序的方式运行,我仍然可以将自己的鼠标用于其他事情,因为自动构建和测试正在运行?

3 个答案:

答案 0 :(得分:2)

<强>更新

我找到了this博文,为我解决了这个问题。正如作者所建议的那样,您需要在构建中添加以下依赖项:

testRuntime 'org.testfx:openjfx-monocle:1.8.0_20'

然后在调用registerPrimaryStage()之前需要包含以下内容,在我的情况下,使用@BeforeClass标记的方法,因为我正在使用JUnit:

System.setProperty("testfx.robot", "glass");
System.setProperty("testfx.headless", "true");
System.setProperty("prism.order", "sw");
System.setProperty("prism.text", "t2k");

我还要补充说,包含System.setProperty("java.awt.headless", "true")以确保您不依赖于AWT中的任何内容非常有用(在我的情况下,我有一个调用来获取导致问题的屏幕大小) 。我也按照博客作者的建议添加了一个开关来打开和关闭无头模式。这给出了如下最终方法:

@BeforeClass
public static void setupSpec() throws Exception {
    if (Boolean.getBoolean("headless")) {
        System.setProperty("testfx.robot", "glass");
        System.setProperty("testfx.headless", "true");
        System.setProperty("prism.order", "sw");
        System.setProperty("prism.text", "t2k");
        System.setProperty("java.awt.headless", "true");
    }
    registerPrimaryStage();
}

您可以在上下文here

中查看解决方案

原始答案:

如果您使用的是Linux,则可以使用xvfb。在基于Debian的系统上,您可以按如下方式安装xvfb:

$ sudo apt-get install xvfb

安装xvfb后,在运行测试之前运行以下命令:

$ Xvfb :99 &>/dev/null &
$ export DISPLAY=:99

如果在同一控制台中启动测试,TestFX将使用帧缓冲区而不是主显示器。因此测试将会运行,但是你不会打开窗户打开并移动鼠标指针。

答案 1 :(得分:0)

我同意KDK使用Monocle,因为它确实与Jenkins一样有魅力。我无法从詹金斯的Xvfb获得可靠的结果。以下是我采取的步骤并为我工作。

准备Monocle

您想从Monocle Github下载Monocle。它看起来有api更改,因此您需要在下载后添加以下方法编辑MonocleView.java。我不确定应该在方法中加入什么,但发现它只是在没有实现它的情况下工作。

@Override
protected int _getNativeFrameBuffer(long ptr) {
    // TODO Auto-generated method stub
    return 0;
}

安装Monocle

构建Monocle jar并将jar放入JRE(在jre / lib / ext路径下)

使用Glass lib运行Monocle

下面是我在jenkins中使用的maven命令,您将对java运行时选项部分感兴趣。

$ mvn clean install -Dtestfx.robot=glass -Dglass.platform=Monocle -Dmonocle.platform=Headless -Dprism.order=sw

答案 2 :(得分:-1)

是的,可以对JavaFx2应用程序进行无头测试。 您将需要Monocle(OpenJFX的一部分)。更多细节在这里: https://github.com/TestFX/Monocle