0

我正在使用带有 Eclipse 的 Junit4 进行测试。我想测试函数 expandAll

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 
          } 
       } 
} 

我遇到的问题是扩展模型。在我的程序(不是测试)中,我使用树传入了扩展模型。这是来自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 树进行测试?任何帮助,将不胜感激。谢谢。

4

2 回答 2

1

包含组件的页面的单元测试可能很困难,它通常需要向您的组件添加仅用于测试的特殊构造函数。当组件来自外部来源(即挂毯核心)时,这变得更加困难。

您是否考虑过硒测试?我经常发现单元测试页面需要付出很多努力却收效甚微。

如果你真的想对这个页面进行单元测试,我建议你重构代码来隔离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实例。

于 2013-07-15T08:46:09.337 回答
0

感谢 uklance。
我只需要使用 DefaultTreeExpansionModel。
这是我测试中的代码片段

expansionModel = new DefaultTreeExpansionModel(); 
testing.expandAll(expansionModel);
于 2013-07-15T10:19:07.550 回答