问题标签 [testfx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5876 浏览

java - 如何测试 JavaFX (MVC) 控制器逻辑?

我们如何正确地为 JavaFX 控制器逻辑编写单元/集成测试?假设我正在测试的 Controller 类名为LoadController,它的单元测试类是LoadControllerTest,我的困惑源于:

  • 如果LoadControllerTest该类LoadController通过 I 实例化一个新对象, LoadController loadController = new LoadController();则可以通过(许多)setter 将值注入控制器。这似乎是使用反射(遗留代码)的唯一方法。如果我不将值注入 FXML 控件,那么这些控件显然还没有初始化,返回 null。

  • 如果我改为使用FXMLLoader'loader.getController()方法来检索loadController它,它将正确初始化 FXML 控件,但控制器initialize()会因此被调用,这会导致运行速度非常慢,并且由于无法注入模拟的依赖项,因此它更像是一个编写不佳的集成测试.

我现在正在使用前一种方法,但是有更好的方法吗?

测试外汇

这里的答案涉及@Tests基于主应用程序start方法而不是Controller 类的 TestFX。它显示了一种测试控制器的方法

但这个答案涉及DataFX - 而我只是询问 JavaFX 的 MVC 模式。大多数 TestFX 讨论都集中在它的 GUI 功能上,所以我很好奇它是否也适合控制器。

下面的示例显示了我如何向控制器注入 aVBox以使其在测试期间不为空。有没有更好的办法?请具体



更新

这是一个基于 hotzst 建议的完整演示,但它返回此错误:

org.mockito.exceptions.base.MockitoException:无法实例化名为 'loadController' 类型的 'class com.mypackage.LoadController' 的 @InjectMocks 字段。您没有在字段声明时提供实例,所以我尝试构建实例。但是构造函数或初始化块抛出异常:null


0 投票
1 回答
729 浏览

javafx - 带有 TestFX 的 TornadoFX 在每个 TestCase 之后关闭视图

我正在尝试使用 testfx 框架测试一个基本的登录屏幕(使用 tornadofx 创建)。

我添加了 3 个运行良好的测试用例,但问题是它们使用前一个阶段而不是创建一个新的阶段。我希望测试用例独立运行。

我正在测试 View() 而不是 App()。如果我使用 MyMainApp().start(stage) 然后 MyMainApp().stop(),我会得到所需的行为。
但是如何为视图和片段执行此操作。

下面是代码:

0 投票
2 回答
976 浏览

java - 运行 gradle 测试时出现 NoClassDefFoundError、FxRobotException、FatalBeanException 和 ExecutionException

我正在尝试在离线机器上使用 gradle 运行 TestFX 测试。

使用类似的命令

在一台机器上它运行良好,但在另一台机器上它失败了

这可能意味着这里的双重错误。运行测试时会发生一个(未知)错误,而在TestFX尝试生成有关它的异常时会发生另一个错误。

我对后一个感兴趣:为什么 Gradle 看不到这个类?

同时,我编写了测试以检查课程是否可用

它通过了,意味着课程FxRobotException可用。

确认,以下依赖项在build.gradle

怎么可能?

更新

如果我跑

(更多信息)

发生以下异常:

奇怪的是,现在我们确实看到了来自的实际消息,FxRobotException并且 class-def 错误现在与不同的FatalBeanException. 同时,根本原因似乎是某处的执行异常。

更新 2

build.gradle如下(注意,它是“本地的”):

并且错误跟踪如下:

更新 3

依赖检查结果

0 投票
2 回答
2280 浏览

java - 如何使用 TestFX 等到元素可见?

我正在尝试使用 TestFX 中的 waitUntil() 方法等到屏幕上出现对话框。我找到了Wiki提供的示例,但它似乎不适用于我。谁能帮我解决这个问题?

0 投票
1 回答
1209 浏览

java - TestFX 点击菜单项

我正在编写一个带有菜单栏的 JavaFX 应用程序。我已经给出了菜单项 CSS id,我想使用 TestFX 来点击它们。这是代码:

当我运行它时,我可以看到我的鼠标移动到屏幕上完全错误的位置,然后测试失败,说它找不到任何匹配的元素#menu-file-new-project。我假设它找不到它们,因为它永远不会打开“文件”菜单,因为它点击了错误的位置。

我该怎么办?Windows 10、Java 8u120、TestFX 4.0.6。对于记录,它在单片无头模式下以相同的方式失败

0 投票
1 回答
333 浏览

java - 在 JavaFX 中使用 Jubula jar

我必须开发一个程序(如 squish / jubula / zaptest )测试使用 JavaFX 编程的应用程序。所以我的问题是:

1) 可以将 jubula jar 作为测试框架库(如 TestFX)添加到应用程序中吗?如果是这样,是否有这方面的文档或教程?我尝试使用 TestFX,但在挂钩和 AUT 方面遇到了巨大的问题。

2) Jubula 可以修改为不同的 Eclipse 工具吗?如何?

每一条评论都将不胜感激。

0 投票
2 回答
299 浏览

javafx - TestFX 如何理解一个项目的颜色?

我正在尝试获取矩形的背景颜色。我试图找到一种方法,但我不能。难道没有一种方法可以让这一切变得简单吗?任何帮助都会得到帮助

0 投票
1 回答
1902 浏览

java - 如何在 TestFX 中测试多个场景

ArithmeticProblem我在 TestFX 中为类编写了一个单元测试。

这是“TestFxBase”的代码

当我加载 Main.class 时,它只显示 ArithmeticProblem-Scene。这是它的外观。

在此处输入图像描述

所以我只能测试ArithmeticProblem.class,因为我不知道如何加载其他场景。在我的菜单中,我还有一些其他点,例如评估或设置,我该如何加载这个场景?

0 投票
0 回答
650 浏览

unit-testing - 无法在无头环境中运行 JavaFX

在我的测试包中,我有常规的单元测试和 testfx 测试。当我尝试运行整个测试包时,那些 testfx 测试全部失败并给出以下异常:

org.junit.AssumptionViolatedException:无法在无头环境中运行 JavaFX

有谁知道如何单独运行 testfx 测试和其他单元测试?

0 投票
0 回答
1339 浏览

java - 在无头模式下执行的第一个 TestFX 测试失败,相同的第二个测试通过

我在使用 TestFX 时遇到问题,并且在我的台式电脑上使用 openjfx-monocle 以无头模式运行。

在我的第一个“爱好项目”中一切正常,但现在在工作中这样做时,我遇到了我们拥有的主菜单的一些问题。

所以主菜单是由一个MenuBar 组成的,其中包含Menus,而那些包含menuItems。链接到下面的图片。

菜单是如何建立的

我遇到的问题是当我想从主窗口打开一个关于对话框时。这是通过单击菜单上的“帮助”菜单栏来完成的,该菜单显示菜单项的下拉列表,对于帮助菜单,我们现在只有“关于”选项。

所以对于实际问题。尝试单击“关于”菜单项时出现错误...因此“帮助”菜单是可单击的。

我得到的错误是:

现在让我感到奇怪的是,它对于执行的下一个测试非常有用。因此,如果我要创建一个空测试,或者一个仅对 1+1 = 2 进行断言并将其设置为首先运行的测试,那么所有测试都会通过。- 但我不想那样做,有些东西闻起来很有趣,我想知道我做错了什么。

现在有没有人以前遇到过这个/类似的问题?或任何可以帮助我的人,希望能指出我犯过的一些愚蠢的新手错误并送我上路:)

您可能需要的其他信息: 操作系统:Windows 7。编辑器:Eclipse。摇篮版本:3.3。JDK:8u121。

build.gradle 文件中的 TestFX 和 Monocle 依赖项是:

我很确定是否还需要其他任何东西,但我会试一试并发布这个。如果我遗漏了什么,或者我有任何不清楚的地方,请事先道歉。

我正在运行的代码如下所示。

这是我的简单 TestFXBase 类:

这是 AboutPage 类: