python - 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 开设了单独的课程之后,也对我没有太大帮助。
解决方案
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]
推荐阅读
- mysql - 如何计算来自不同行的数据
- python - 如何在我的程序生成的一些列表中找到最小的列表?
- c - 如何用scanf()读取一个char指针?
- grafana - 关于高度和宽度的 Grafana 面板错误
- vb.net - 实现 vbnet 接口的问题。可能的继承问题,因为我需要从 System.Drawing.Point 继承
- java - 支付宝付款后不返回申请
- javascript - 原生js中svg视图框上的element.animate
- go - Go中不一致的附加行为?
- python - 如果变量不是None,是否有一种pythonic方法可以向while语句添加条件
- windows - Windows 上的 GIT 问题(文件名或扩展名太长)