2011-12-09 13 views
1

私は、現在の選択をかなり頻繁に取得する必要があるため、作成したTreeViewerの選択を返すメソッドを書きました。Java JUnit: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()); 

は、どのように私はJUnitの-テストのためにそれで何かを選択し、有効なTreeViewerを作成することができますか?

+2

あなたはcreateTestTreeためのコードを表示することができますか?それを見ることなく、私はあなたが実際に木にアイテムを追加していないと思います。 –

答えて

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