【问题标题】:SWTBotTest Case should be halted until Progressbar is overSWTBotTest Case 应该停止,直到 Progressbar 结束
【发布时间】:2020-05-25 04:54:10
【问题描述】:

我对 SWTBot 工具测试比较陌生。我正在运行 JUnit 测试用例,其中 TestCase 应该在选择项目时运行,并且应该在测试用例开始执行之前加载项目中的文件,但 Testcase 开始执行而不等待加载处理。

项目中文件的加载由 Eclipse(插件:-org.eclipse.sphinx.emf.workspace.loading)使用 ProgressBar 提供。 通过网上冲浪,我发现
bot.waitUntil() 用于停止 TestCase,如果在继续进行之前必须完成任何操作。我尝试了多种选择,但无法得到我期望的结果。

谁能帮我解决这个问题

【问题讨论】:

  • 我不知道插件,但如果你使用this LoadJobScheduler,那么Job.getJobManager().join(IExtendedPlatformConstants.FAMILY_MODEL_LOADING, new NullProgressMonitor()) 应该可以工作。 LoadJobScheduler 在后台启动属于 FAMILY_MODEL_LOADING 家族的 ModelLoadJob 实例(如果适合您的需要,我将作为答案展开)。
  • 感谢Emmanuel的回复。你说得对,它使用的是eclipse提供的LoadJobScheduler (org.eclipse.sphinx.emf.workspace.loading)。在SWTBot中,有一个叫做bot的方法.waitUntil() 除了 ProgressMonitor Shell 我不知道如何得到它。你能详细说明你的答案可能有助于我寻求答案。
  • 我已经提交了更详细的答案。如果它满足您的需求,请考虑接受它或解释为什么它不能满足您的需求,以便改进。

标签: junit eclipse-rcp swtbot


【解决方案1】:

我建议你打电话:

Job.getJobManager().join(
    IExtendedPlatformConstants.FAMILY_MODEL_LOADING, 
    new NullProgressMonitor()
);

而不是使用bot.waitUntil。它应该阻塞当前线程(即您的测试),直到文件加载完成。

Eclipse Jobs 在后台运行时,Eclipse UI 会自动填充进度视图。在您的情况下,这些作业由LoadJobScheduler 安排。这个想法是直接使用 Eclipse 的 Jobs API 来等待这些作业结束,而不是查询 UI。这正是Job.getJobManager().join 所做的,另请参见this answer

注意join 将等待作业所属的族作为参数。我在implementation of the loading Job 找到它。

防止无限循环

由于join 被阻塞,它可能会导致无限循环。您可以使用JobManager::find 在不阻塞线程的情况下检查正在运行的作业:

bot.waitUntil(new DefaultCondition() {
    @Override
    public boolean test() throws Exception {
        String family = IExtendedPlatformConstants.FAMILY_MODEL_LOADING;
        boolean allJobsAreDone = Job.getJobManager().find(family).length == 0;
        return allJobsAreDone;
    }
}); 

使用上面的代码,如果几秒钟后作业仍然在运行,SWTBot 将抛出 TimeoutException

【讨论】:

    猜你喜欢
    • 2016-11-02
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 2019-02-26
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    相关资源
    最近更新 更多