2013-07-15 24 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);