我正在处理一个相当大的项目,其中包括一组自定义 JavaFX 组件。对于每个要重用的自定义组件,我已经开始使用 JemmyFX 和 JUnit 编写一组自动化测试。在开发过程中,我从 Eclipse Juno 内部运行这些。
一次运行整套测试被证明是困难的。问题似乎源于这样一个事实,因为我想测试多个组件,理想情况下我会为每个组件运行不同的应用程序(这样在一个组件上执行的测试不会影响其他测试)。
我创建了一个基类,它执行以下操作:
@课前 公共静态无效 beforeClass() { 线程 t = new Thread("JavaFX 初始化线程") { @覆盖 公共无效运行(){ Application.launch(UITester.class, new String[0]); } }; t.setDaemon(true); t.start(); }
@Test
使用这个基类,我为每个自定义控件创建了一个带有测试的单独类。当我运行这个测试套件时,第一个测试用例运行良好,但其余的都失败了:
线程“JavaFX Init Thread”java.lang.IllegalStateException 中的异常:不能多次调用应用程序启动
我尝试了以下方法来解决这个问题:
关闭应用程序
我在基类中添加了以下内容:
@下课以后 公共静态无效后类(){ 平台.exit(); }
同样的问题仍然存在。也许是因为虚拟机在测试之间没有重新启动?
防止重新启动应用程序
我放入了一个静态变量来检查应用程序是否已经在运行。当我从 Eclipse 运行测试时,这使问题消失了。当我从命令行运行它们时,问题仍然存在。当我们尝试在集成服务器上运行这些测试时,这并不好。
捕获 IllegalStateException
这是一个奇怪的问题。我可以捕捉到异常,并且我的大部分问题都消失了,除了整个测试套件 Ubuntu 的每 4 或 5 次运行都会崩溃到 shell 并且我必须重新登录。
那么,如何最好地为大量自定义控件编写测试?我的方法不正确吗?