我编写了一个返回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测试?
发布于 2012-10-26 19:39:54
您可能已经解决了这个问题一段时间:)
但我怀疑,因为您的测试是在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();
}
}https://stackoverflow.com/questions/8447033
复制相似问题