Java 为什么选择TreeModel';JUnit测试中的选择不同?
我已经为ZK树组件实现了新的模型类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,
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
}