Java 为什么选择TreeModel';JUnit测试中的选择不同?

Java 为什么选择TreeModel';JUnit测试中的选择不同?,java,groovy,spock,zk,Java,Groovy,Spock,Zk,我已经为ZK树组件实现了新的模型类 public class AiTreeModel<E> extends DefaultTreeModel<E> implements Serializable { private static final long serialVersionUID = 20160122L; private void processChildNodes(TreeNode<E> node, boolean selected,

我已经为ZK树组件实现了新的模型类

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);
    }
}
运行时选择正确,所有父节点都会添加。但在测试中,父节点在模型的
Selection
map中重写

我做错了什么? 这种测试方法正确吗


谢谢你的回答和问候。

我发现了问题。这是因为树处于单一选择模式。
model.setMultiple(true)一切正常


谢谢您浪费时间。

这是一个Spock测试,不是吗?为什么要将
升级到
model.processNode(node,true,this)
。你能提供一个完整的测试源吗?是的,这是spock测试。我在方法调用中通过了
这个
,因为方法在选择/取消选择项时需要接口来处理树的叶子。
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
}