Java JUnit: тестовый выбор TreeViewer - PullRequest
1 голос
/ 09 декабря 2011

Я написал метод, который возвращает выборки 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 Ответ

1 голос
/ 26 октября 2012

Возможно, вы решили эту проблему на некоторое время :)

Но я подозреваю, что, поскольку ваш тест выполняется в потоке пользовательского интерфейса, программа просмотра не может быть обновлена. В этом случае решение состоит в том, чтобы попытаться позволить 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();
        }
    }
...