2013-07-15 40 views
0

我正在用eclipse測試Junit4。我想測試的功能expandAllTapestry:如何使用JUnit4進行測試時有@InjectComponent

public void expandAll(TreeExpansionModel<TreeData> expansionModel) 
{ 
    List<TreeNode<TreeData>> roots = getTreeModel().getRootNodes(); 
    for (TreeNode<TreeData> root : roots) 
    { 
     expandAllNode(root, expansionModel); 
    } 
} 

private void expandAllNode(TreeNode<TreeData> node, TreeExpansionModel<TreeData> expansionModel) 
{ 
     if (node.getHasChildren()) 
     { 
      expansionModel.markExpanded(node); 
      for (TreeNode child : node.getChildren()) 
     { 
      expandAllNode(child, expansionModel); // this is a recursive call 
      } 
     } 
} 

我遇到的問題是expansionModel。在我的程序(不是測試)中,我使用樹來傳入expansionModel。 這是來自java的代碼片段。

@InjectComponent 
private Tree tree; 

public void onExpandAll() 
{ 
    expansionModel = tree.getExpansionModel(); 
    treeFunction.expandAll(expansionModel); 

    ajaxResponseRenderer.addRender(treeZone); 

} 

我一直在使用

tree = new Tree(); 
expansionModel = tree.getExpansionModel(); 
testing.expandAll(expansionModel); 

在我的測試嘗試,但在expansionModel我得到的是空。我如何去使用@InjectComponent樹進行測試? 任何幫助,將不勝感激。謝謝。

回答

1

對包含組件的頁面進行單元測試可能很困難,它通常需要爲組件添加特殊的構造函數,這些構件只需要進行測試。當這些組件來自外部來源(即tapestry-core)時,這變得更加困難。

您是否考慮過selenium testing?我經常發現單元測試頁面需要很多努力才能獲得小的收益。

如果你真的想單元測試此頁,我建議你重構代碼隔離Tree依賴性:

@InjectComponent 
private Tree tree; 

public void onExpandAll() { 
    onExpandAll(tree.getExpansionModel()); 
} 

protected void onExpandAll(TreeExpansionModel expansionModel) { 
    treeFunction.expandAll(expansionModel); 
    ajaxResponseRenderer.addRender(treeZone); 
} 

然後你就可以單元測試第二onExpandAll方法,而無需使用DefaultTreeExpansionModel一個Tree實例或類似的。

0

感謝uklance。
我只需要使用DefaultTreeExpansionModel。
這裏是我測試中的代碼片段

expansionModel = new DefaultTreeExpansionModel(); 
testing.expandAll(expansionModel);