Java JUnit:TreeViewer的测试选择

时间:2011-12-09 14:37:03

标签: java junit swt

我写了一个返回TreeViewer选择的方法,我创建了这个选项,因为我必须经常得到当前的选择。

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

也许我做错了,但这就是我现在正在做的事情:

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-Testing选择一些内容?

1 个答案:

答案 0 :(得分:1)

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

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

    /**
     * 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();
        }
    }