首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java JUnit: TreeViewer的测试选择

Java JUnit: TreeViewer的测试选择
EN

Stack Overflow用户
提问于 2011-12-09 22:37:03
回答 1查看 391关注 0票数 1

我编写了一个返回TreeViewer选择的方法,因为我必须经常获取当前选择,所以我创建了这个方法。

我正在尝试用JUnit测试这个方法,但由于某些原因,我手动创建的选择将不起作用。显然,TreeViewer中的树不是在JUnit环境中创建的,因此不能返回任何选择。当我调用getItems() "org.eclipse.debug.core.DebugException: com.sun.jdi.ClassNotLoadedException:检索数组的组件类型时未加载类型“时,调试程序会显示以下消息。

也许我做的完全错了,但我现在就是这样做的:

代码语言:javascript
复制
TreeNode root = createTestTree();
    viewer.setContentProvider(new TreeNodeContentProvider());
    viewer.setInput(root); //<-- is a tree with at least 9 nodes
    viewer.getTree().update(); //<-- tried to update out of desperation, no effect
    viewer.refresh();

    TreeItem [] items = viewer.getTree().getItems(); //<-- always empty, why
    viewer.getTree().setSelection(items[3]);
    viewer.refresh();
    viewer.getTree().update();

    sel = TreeUtil.getTreeSelections(viewer);
    assertEquals(1, sel.size());

我如何创建一个有效的TreeViewer,在其中选择一些东西来进行JUnit测试?

EN

回答 1

Stack Overflow用户

发布于 2012-10-26 19:39:54

您可能已经解决了这个问题一段时间:)

但我怀疑,因为您的测试是在UI线程中运行的,所以查看器无法刷新。在这种情况下,一种解决方案是尝试让JVM通过在每次调用代码中的refresh()方法之后调用代码段来刷新视图:

代码语言:javascript
复制
    /**
     * Execute pending UI tasks
     */
    public static void doPendingUIJobs() {
        try {
            Thread.yield();
            IWorkbench wb = PlatformUI.getWorkbench();
            if (wb != null) {
                Display display = wb.getDisplay();
                if (display != null) {
                    do {
                    } while (display.readAndDispatch());
                }
            }
        } catch (Throwable _) {
            System.out.println("doPendingUIJobs error:" + _);
            _.printStackTrace();
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8447033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档