我写了一个返回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选择一些内容?
答案 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();
}
}