Python 单元测试类型错误
Python unittest TypeError
尝试在 Python 中构建单元测试,但我收到此 TypeError,它说它缺少必需的潜在参数。
我已经尝试了所有方法并在此处得到了这段代码:
import unittest
from MyCosine import CosineSim, CosineDis
class TestMyCosine(unittest.TestCase):
x = [3.5 , 3 , 3.5 , 2.5 , 3]
y = [3.5 , 3 , 4 , 2.5 , 4.5]
result = 0.9865867
def testCosineSim(self, result, x, y):
self.x = x
self.y = y
self.result = result
self.assertEqual(CosineSim(x,y), result, "0.9865867" )
def testCosineDis(self, result, x, y):
self.x = x
self.y = y
self.result = result
self.assertEqual(CosineDis(x,y) , result, "0.9865867")
if __name__ == '__main__':
unittest.main(exit=False)
这是错误消息:
======================================================================
ERROR: testCosineDis (__main__.TestMyCosine)
----------------------------------------------------------------------
TypeError: testCosineDis() missing 3 required positional arguments: 'result', 'x', and 'y'
======================================================================
ERROR: testCosineSim (__main__.TestMyCosine)
----------------------------------------------------------------------
TypeError: testCosineSim() missing 3 required positional arguments: 'result', 'x', and 'y'
----------------------------------------------------------------------
Ran 2 tests in 0.000s
FAILED (errors=2)
这是实际功能之一:
def CosineDis(x,y):
result = 1 - distance.cosine(x, y)
return result
那是因为您创建的变量会自动传递给测试用例。
一种解决方案是手动传递参数。或者您可以为此使用 parametrized 之类的解决方案:
from parameterized import parameterized
class TestSequence(unittest.TestCase):
@parameterized.expand([
[0.9865867, 3.5, 3.5],
[0.9865867, 3, 3],
])
def testCosineSim(self, result, x, y):
self.assertEqual(CosineSim(x,y), result)
您定义 x
的范围与您使用 x
作为输入参数的范围不同。
由于您似乎想对 x、y 和结果使用静态值,我们可以在调用任何测试方法之前将它们放在单元测试将检测到的 setUp()
和 运行 中。
phone 上的快速编辑(未测试):
import unittest
from MyCosine import CosineSim, CosineDis
class TestMyCosine(unittest.TestCase):
def setUp(self) :
self.x = [3.5 , 3 , 3.5 , 2.5 , 3]
self.y = [3.5 , 3 , 4 , 2.5 , 4.5]
self.result = 0.9865867
def testCosineSim(self):
self.assertEqual(CosineSim(self.x,self.y), self.result, "0.9865867" )
def testCosineDis(self):
self.assertEqual(CosineDis(self.x,self.y) , self.result, "0.9865867")
if __name__ == '__main__':
unittest.main(exit=False)
尝试在 Python 中构建单元测试,但我收到此 TypeError,它说它缺少必需的潜在参数。 我已经尝试了所有方法并在此处得到了这段代码:
import unittest
from MyCosine import CosineSim, CosineDis
class TestMyCosine(unittest.TestCase):
x = [3.5 , 3 , 3.5 , 2.5 , 3]
y = [3.5 , 3 , 4 , 2.5 , 4.5]
result = 0.9865867
def testCosineSim(self, result, x, y):
self.x = x
self.y = y
self.result = result
self.assertEqual(CosineSim(x,y), result, "0.9865867" )
def testCosineDis(self, result, x, y):
self.x = x
self.y = y
self.result = result
self.assertEqual(CosineDis(x,y) , result, "0.9865867")
if __name__ == '__main__':
unittest.main(exit=False)
这是错误消息:
======================================================================
ERROR: testCosineDis (__main__.TestMyCosine)
----------------------------------------------------------------------
TypeError: testCosineDis() missing 3 required positional arguments: 'result', 'x', and 'y'
======================================================================
ERROR: testCosineSim (__main__.TestMyCosine)
----------------------------------------------------------------------
TypeError: testCosineSim() missing 3 required positional arguments: 'result', 'x', and 'y'
----------------------------------------------------------------------
Ran 2 tests in 0.000s
FAILED (errors=2)
这是实际功能之一:
def CosineDis(x,y):
result = 1 - distance.cosine(x, y)
return result
那是因为您创建的变量会自动传递给测试用例。 一种解决方案是手动传递参数。或者您可以为此使用 parametrized 之类的解决方案:
from parameterized import parameterized
class TestSequence(unittest.TestCase):
@parameterized.expand([
[0.9865867, 3.5, 3.5],
[0.9865867, 3, 3],
])
def testCosineSim(self, result, x, y):
self.assertEqual(CosineSim(x,y), result)
您定义 x
的范围与您使用 x
作为输入参数的范围不同。
由于您似乎想对 x、y 和结果使用静态值,我们可以在调用任何测试方法之前将它们放在单元测试将检测到的 setUp()
和 运行 中。
phone 上的快速编辑(未测试):
import unittest
from MyCosine import CosineSim, CosineDis
class TestMyCosine(unittest.TestCase):
def setUp(self) :
self.x = [3.5 , 3 , 3.5 , 2.5 , 3]
self.y = [3.5 , 3 , 4 , 2.5 , 4.5]
self.result = 0.9865867
def testCosineSim(self):
self.assertEqual(CosineSim(self.x,self.y), self.result, "0.9865867" )
def testCosineDis(self):
self.assertEqual(CosineDis(self.x,self.y) , self.result, "0.9865867")
if __name__ == '__main__':
unittest.main(exit=False)