我正在从事一个相当大的项目,其中包括一组自定义JavaFX组件。对于每个需要重用的自定义组件,我已经开始使用JemmyFX和JUnit编写一组自动化测试。在开发过程中,我从Eclipse Juno内部运行这些。
事实证明,一次运行整个测试套件很困难。这个问题似乎源于这样一个事实,因为我想测试多个组件,所以理想情况下,我会为每个组件运行不同的应用程序(以便在一个组件上执行的测试不会影响其他测试)。
我创建了一个基类,它执行以下操作:
@BeforeClass public static void beforeClass() { Thread t = new Thread("JavaFX Init Thread") { @Override public void run() { Application.launch(UITester.class, new String[0]); } }; t.setDaemon(true); t.start(); }
使用这个基类,我为每个自定义控件创建了一个单独的类,其中包含测试。当我运行此测试套件时,第一个测试用例运行良好,但其余测试失败:
Exception in thread "JavaFX Init Thread" java.lang.IllegalStateException: Application launch must not be called more than once
我尝试了以下方法来解决这个问题:
我在基类中添加了以下内容:
@AfterClass public static void afterClass() { Platform.exit(); }
同样的问题仍然存在。也许是因为在测试之间没有重新启动VM?
我输入了一个静态变量来检查应用程序是否已经在运行。当我从Eclipse运行测试时,这个问题就消失了。当我从命令行运行它们时,问题仍然存在。不适合在integration server上运行这些测试。
这是一个奇怪的问题。我可以捕获异常,我的大部分问题都消失了,除了整个测试套件Ubuntu每运行4或5次就会崩溃到shell,我必须重新登录。
那么,如何最好地为一大套自定义控件编写测试呢?我的方法是否错误?
在查看了MarvinFX的源代码后,我能够以解决我的问题的方式实现我们的测试框架。解决这个问题的最大贡献似乎是为每个测试重建舞台和场景,如以下(伪)代码所示:
@Before
public void before() {
Node node = generateComponentToTest();
Parent parent = StackPaneBuilder.create().children(node).build();
Scene scene = SceneBuilder.create().root(parent).build();
if (this.currentStage != null) {
this.currentStage.close();
}
Stage stage = new Stage();
stage.setScene(scene);
stage.centerOnScreen();
stage.show();
this.currentStage = stage;
}
我目前正在使用testng selenium来自动化我的测试,我有以下场景: 我需要从excel文件中读取数据,转换对象中的每一行,并为每一行运行一个测试。我试图使用annotation@DataProvider返回一个对象数组,但是它只能返回迭代器和对象[]。是否有任何变通方法可用于从数据提供程序返回客户机对象数组?我尝试了以下代码,但它只打印来自Client2的数据: 编辑1:客户类别: 在控
我的actor运行在默认的akka调度程序上,然后调用一个返回Future的方法。我配置了不同的executioncontexts让所有的futures运行(因为它们是阻塞的(由于db调用),并且让actordispatcher只专用于非阻塞actors。想知道这段代码是否可以使用Akka testkit进行测试(继续使用两个执行上下文等)?如果是的话,那么配置测试的方法是什么,让Actor运行在
我有一个Java项目,它在参考资料中有多个测试目录。 并且在实际的测试器中:
问题内容: 我在python中有以下代码 我的问题是在test_home_page函数之后,firefox实例关闭并为下一个test_whatever函数再次打开。我该怎么做,以便所有测试用例都从同一firefox实例执行。 问题答案: 在以下位置初始化firefox驱动程序:
问题内容: 我一直在寻找一种在测试方法中使用多个DataProvider的方法。我的情况如下: 假设我们有一个DataProvider类: 现在,在我的Test方法中,我要针对方案的所有组合运行: 绿广场 红方格 绿三角 红三角 鉴于我无法使用注释指定多个DataProvider,因此应如何在代码中实现此目标 问题答案: 由于缺乏更好的方法,我决定坚持解决方法。这是如何实现上述方案的示例: 这样,
我在scala上,我有多个针对不同类(testsuites)的测试文件,每一个都使用testcontainers(来自同一脚本的init)。 当我启动项目中的所有测试时,所有测试都失败了(由于testContainers导致与数据库的连接出现问题)。 当我分别启动测试时,所有的测试都成功了。 有没有办法为多个测试文件(testsuites)只启动一个容器?似乎只对同一文件中的测试起作用。 @Mat