首页 > 解决方案 > 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

标签: pythonpython-3.xpython-unittest

解决方案


您定义的位置x和用作x输入参数的位置的范围是不一样的。由于您似乎想对 x、y 和结果使用静态值,我们可以将它们放在setUp()单元测试将在调用任何测试方法之前检测和运行的位置。

手机快速编辑(未测试):

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)

推荐阅读