gpt4 book ai didi

unit-testing - 使用 JavaFx 和 TestFx 进行 headless 测试

转载 作者:行者123 更新时间:2023-12-04 04:45:22 27 4
gpt4 key购买 nike

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

最佳答案

更新:

我找到了 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 中的任何内容(在我的情况下,我接到了一个电话以获取导致问题的屏幕大小)。我还按照博客作者的建议添加了一个开关来打开和关闭 headless 模式。这给出了最终的方法如下:
@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 将使用帧缓冲区而不是您的主显示器。因此,测试将运行,但您不会被打开的窗口和四处移动的鼠标指针所困扰。

关于unit-testing - 使用 JavaFx 和 TestFx 进行 headless 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27403410/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com