首页 > 解决方案 > Python 单元测试用例错误:恰好需要 2 个参数(给定 3 个)

问题描述

在运行 python Binary Search Tree Traversal 的测试用例时遇到问题。它给出了一个错误:

======================================================================
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 开设了单独的课程之后,也对我没有太大帮助。

标签: pythonbinary-search-treeinorder

解决方案


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()
.
[1, 2, 5, 5, 10, 15, 22]

推荐阅读