0
我已經爲ZK樹組件實現了新的模型類。爲什麼TreeModel的選擇在JUnit測試中有所不同?
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
模型的地圖。
我做錯了什麼? 這種測試方法是否正確?
感謝您的回答和最誠摯的問候。
這是Spock測試不是嗎? –
爲什麼把'this'傳遞給'model.processNode(node,true,this)'。您能否提供完整的測試來源? – Opal
是的,它是spock測試。 – gooamoko