为什么TreeModel的选择在JUnit测试中有所不同?

时间:2016-01-25 08:04:23

标签: java groovy spock zk

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

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模型图中。

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

感谢您的回答和最好的问候。

1 个答案:

答案 0 :(得分:0)

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

感谢您浪费时间。