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 楼答案
我发现了问题。这是因为树处于单一选择模式。
model.setMultiple(true);
一切都很好谢谢你浪费时间