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)