str对象不可调用用于单元测试

2 投票
2 回答
2765 浏览
提问于 2025-04-16 20:04

我写了一个测试案例,结果出现了错误

from unittest import *
class MyTest(unittest.TestCase):
    def test_add(self):
        self.assertEquals(1,(2-1),"Sample Subraction Test")


if __name__ == '__main__':
    unittest.main()

输出结果是:Str对象不可调用

我用的是 "import unittest" 而不是 "from unittest import *"

这样就能正常工作了

不过我还是不太明白,为什么会出现这个问题呢?

2 个回答

-1

我这样搞定的。重写了 runTest() 方法,创建了一个实例,然后运行你的 test_add() 方法。

from unittest import TestCase

class MyTest(TestCase):
    def runTest(self):
        pass

    def test_add(self):
        self.assertEquals(1,(2-2),"Sample Subraction Test")


if __name__ == '__main__':
    test = MyTest()
    test.test_add()
4

from ... import * 这种写法是很危险的,只有在模块或包特别设计成这样,并且你有充分理由的时候才能使用。

结果发现,unittest 并不是这样设计的,当使用这种方法时,会找到另外两个“测试用例”,但它们其实并不是真正的测试用例,这样就会引发问题。

你想要的正确做法是:

import unittest
class MyTest(unittest.TestCase):
    def test_subtraction(self):
        self.assertEqual(1, (2-1), "Sample Subraction Test")

if __name__ == '__main__':
    unittest.main()

在研究这个问题时,我发现 __all__ 变量可以并且应该用来定义公共接口——它的存在并不意味着支持 from ... import * 这种写法。

撰写回答