模拟树数据结构

时间:2015-03-07 17:46:23

标签: c# data-structures nunit moq

我正在编写一个程序,它接受一个给定的二叉树并尝试确定树是否平衡。

程序期望二叉树作为输入,例如:1,-1,-2,-3将表示为1作为根节点,而后续.getLeft()(或.getRight()如果是树的平衡方式不同!)命令会产生-1,-2,-3。

如果需要重复调​​用不同的节点对象,我怎样才能实现这种行为?是最好的做法是在moq中实现这一点,还是只使用简单的实现更好。

1 个答案:

答案 0 :(得分:1)

使用普通实现。在这种情况下,我不建议你使用假货。创建假的努力将花费更多,然后只为您将测试的每个场景创建树。另一个危险是创建过度指定的测试,在任何变化时都会失败。

您的方法可能会实现如下:

    public static bool isBalanced(Node root){

        if(root==null){
            return true; 
        }
        else{
            int lHight = root.left.height();
            int rHight = root.right.height();
            if(Math.Abs(lHight - rHight) > 1)
            {
                return false;
            }

            return isBalance(root.left) && isBalance(root.right);

        }
    }

你可以看到有一个递归。通常用假货测试递归方法很困难。在你的情况下,你可以测试方法行为没有任何假,所以我说这是正确的选择。

我建议您测试以下行为:

空树,根平衡,根不平衡(朝左,朝右),多层树:平衡,朝右,朝左

如果您要创建上述方案,您可能会涵盖所有情况,并且您的测试不会被过度指定......