Python单元测试用例错误:只接受2个参数(给定3个)

Python单元测试用例错误:只接受2个参数(给定3个),python,binary-search-tree,inorder,Python,Binary Search Tree,Inorder,在运行python二进制搜索树遍历测试用例时遇到问题。它给出了一个错误,如下所示: ====================================================================== ERROR: test_case_1 (__main__.TestProgram) ---------------------------------------------------------------------- Traceback (most recent c

在运行python二进制搜索树遍历测试用例时遇到问题。它给出了一个错误,如下所示:

======================================================================
ERROR: test_case_1 (__main__.TestProgram)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "BST_traversal.py", line 31, in test_case_1
    self.assertEqual(root.inOrderTraversal(root,[]),inOrder)
TypeError: inOrderTraversal() takes exactly 2 arguments (3 given)

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (errors=1)
BST的代码为:

import unittest

class BST:
    def __init__(self,value):
        self.value = value
        self.left = None
        self.right = None

    def inOrderTraversal(self,array):
        if self is not None:
            inOrderTraversal(self.left,array)
            array.append(self.value)
            inOrderTraversal(self.right,array)
        return array

class TestProgram(unittest.TestCase):
    def test_case_1(self):
        root = BST(10)
        
        root.left = BST(5)
        root.left.left = BST(2)
        root.left.left.left = BST(1)
        root.left.right = BST(5)
        root.right = BST(15)
        root.right.right = BST(22)

        inOrder = [1, 2, 5, 5, 10, 15, 22]
        preOrder = [10, 5, 2, 1, 5, 15, 22]
        postOrder = [1, 2, 5, 5, 22, 15, 10]

        self.assertEqual(root.inOrderTraversal(root,[]),inOrder)

if __name__ == '__main__':
    unittest.main()


即使在为BST创建了一个单独的类之后,也不会给我太多帮助。

self是一个隐藏的参数,你不需要给出它

import unittest


class BST:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

    def inOrderTraversal(self, data, array):
        if data is not None:
            data.inOrderTraversal(data.left, array)
            array.append(data.value)
            data.inOrderTraversal(data.right, array)
        return array


class TestProgram(unittest.TestCase):
    def test_case_1(self):
        root = BST(10)

        root.left = BST(5)
        root.left.left = BST(2)
        root.left.left.left = BST(1)
        root.left.right = BST(5)
        root.right = BST(15)
        root.right.right = BST(22)

        inOrder = [1, 2, 5, 5, 10, 15, 22]
        preOrder = [10, 5, 2, 1, 5, 15, 22]
        postOrder = [1, 2, 5, 5, 22, 15, 10]
        arr = root.inOrderTraversal(root, [])
        print(arr)
        self.assertEqual(arr, inOrder)


if __name__ == '__main__':
    unittest.main()

self是一个隐藏的参数,你不需要给出它

import unittest


class BST:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

    def inOrderTraversal(self, data, array):
        if data is not None:
            data.inOrderTraversal(data.left, array)
            array.append(data.value)
            data.inOrderTraversal(data.right, array)
        return array


class TestProgram(unittest.TestCase):
    def test_case_1(self):
        root = BST(10)

        root.left = BST(5)
        root.left.left = BST(2)
        root.left.left.left = BST(1)
        root.left.right = BST(5)
        root.right = BST(15)
        root.right.right = BST(22)

        inOrder = [1, 2, 5, 5, 10, 15, 22]
        preOrder = [10, 5, 2, 1, 5, 15, 22]
        postOrder = [1, 2, 5, 5, 22, 15, 10]
        arr = root.inOrderTraversal(root, [])
        print(arr)
        self.assertEqual(arr, inOrder)


if __name__ == '__main__':
    unittest.main()
导入单元测试 BST级: 定义初始值,值: 自我价值=价值 self.left=无 self.right=无 def inOrderTraversalself,数组: 如果self和self.left: self.left.inOrderTraversalarray 如果自我: array.appendself.value 如果self和self.right: self.right.inOrderTraversalarray 返回数组 类TestProgramunittest.TestCase: def测试案例本身: 根=BST10 root.left=BST5 root.left.left=BST2 root.left.left.left=BST1 root.left.right=BST5 root.right=BST15 root.right.right=BST22 顺序=[1,2,5,5,10,15,22] 前序=[10,5,2,1,5,15,22] 后序=[1,2,5,5,22,15,10] self.assertEqualroot.inOrderTraversal[],inOrder 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': unittest.main 应该是这样的。您已经非常接近了,只需要了解self参数是如何工作的。也不是没有冗余,仅供参考。

导入单元测试 BST级: 定义初始值,值: 自我价值=价值 self.left=无 self.right=无 def inOrderTraversalself,数组: 如果self和self.left: self.left.inOrderTraversalarray 如果自我: array.appendself.value 如果self和self.right: self.right.inOrderTraversalarray 返回数组 类TestProgramunittest.TestCase: def测试案例本身: 根=BST10 root.left=BST5 root.left.left=BST2 root.left.left.left=BST1 root.left.right=BST5 root.right=BST15 root.right.right=BST22 顺序=[1,2,5,5,10,15,22] 前序=[10,5,2,1,5,15,22] 后序=[1,2,5,5,22,15,10] self.assertEqualroot.inOrderTraversal[],inOrder 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': unittest.main 应该是这样的。您已经非常接近了,只需要了解self参数是如何工作的。也不是没有多余的,仅供参考。

Python的。您需要对实现进行重大调整,或者创建单独的独立函数,或者修改inOrderTraversal以接受其他参数。您需要对实现进行重大调整,或者创建单独的独立函数,或者修改inOrderTraversal以引入其他参数。