有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我已经为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);
    }
}

在这个模型中,控制父母选择的方法很少。 在类之外,我只使用一个公共方法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) 个答案

  1. # 1 楼答案

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

    谢谢你浪费时间