2016-01-25 150 views
0

我已經爲ZK樹組件實現了新的模型類。爲什麼TreeModel的選擇在JUnit測試中有所不同?

public class AiTreeModel<E> extends DefaultTreeModel<E> implements Serializable { 
    private static final long serialVersionUID = 20160122L; 

    private void processChildNodes(TreeNode<E> node, boolean selected, IAttributeProcessor leafProcessor) { 
     if (selected) { 
      addToSelection(node); 
     } else { 
      removeFromSelection(node); 
     } 
     if (node.isLeaf()) { 
      leafProcessor.process(node, selected); 
     } else { 
      node.getChildren().forEach(child -> processChildNodes(child, selected, leafProcessor)); 
     } 
    } 


    private boolean isSomeChildSelected(TreeNode<E> node) { 
     if (node.isLeaf()) { 
      return isSelected(node); 
     } else { 
      return node.getChildren().stream().anyMatch(this::isSomeChildSelected); 
     } 
    } 

    private void checkParentNodes(final TreeNode<E> node, boolean selected) { 
     TreeNode<E> parent = node.getParent(); 
     while (parent != null) { 
      if (selected) { 
       addToSelection(parent); 
      } else { 
       if (!isSomeChildSelected(parent)) { 
        removeFromSelection(parent); 
       } 
      } 
      parent = parent.getParent(); 
     } 
    } 

    public void processNode(TreeNode<E> node, boolean selected, IAttributeProcessor leafProcessor) { 
     processChildNodes(node, selected, leafProcessor); 
     checkParentNodes(node, selected); 
    } 

    public AiTreeModel(TreeNode<E> root) { 
     super(root); 
    } 
} 

在這個模型中,有幾個方法,控制父母的選擇。 課外我只使用一種公開方法processNode

我想編寫簡單的Groovy JUnit測試,它會檢查這個模型。例如:

def "Test parent selection"() { 
    setup: 
    def AiTreeModel<?> model = new AiTreeModel<>(helper.getTreeByDate(new Date())); 

    when: 
    TreeNode<?> root = model.getRoot(); 
    def node = root.getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0); 
    model.processNode(node, true, this); 

    then: 
    model.getSelection().size() == 3 
} 

在運行時選擇工作正確,並且所有父節點都添加。但在測試中,父節點重寫了Selection模型的地圖。

我做錯了什麼? 這種測試方法是否正確?

感謝您的回答和最誠摯的問候。

+0

這是Spock測試不是嗎? –

+0

爲什麼把'this'傳遞給'model.processNode(node,true,this)'。您能否提供完整的測試來源? – Opal

+0

是的,它是spock測試。 – gooamoko

回答

0

我發現了這個問題。這是因爲樹處於單選模式。 model.setMultiple(true);和一切正常。

感謝您浪費時間。

相關問題