Unittest中的setUpClass不生效

8 投票
3 回答
12139 浏览
提问于 2025-04-16 23:21

我正在尝试开始使用unittest这个测试工具,但在使用setUpClass()时遇到了问题。以下是我的测试代码...

import unittest

class TestRepGen(unittest.TestCase):
    """ Contains methods for training data testing """

    testvar = None

    @classmethod
    def setUpClass(cls):
        cls.testvar = 6

    def test_method(self):
        """ Ensure data is selected """
        self.assertIsNotNone(self.testvar,"self.testvar is None!")

# run tests
if __name__ == '__main__':
    unittest.main()

出现了一个断言错误信息,显示self.testvar == None,而且这个值没有被setUpClass()改变。我的代码有什么问题吗?

无论是从我的IDE(Wing)运行代码,还是直接从命令行运行,结果都是一样的。顺便说一下,我是在Windows7下使用Python 3.2.1。

3 个回答

7

我猜你不是直接调用这个测试类,而是调用了一个派生类。

如果是这样的话,你需要手动调用 setUpClass(),它不会自动被调用。

class TestB(TestRepGen):
    @classmethod
    def setUpClass(cls):
        super(TestB, cls).setUpClass()

另外,根据文档类级别的固定装置是由测试套件实现的。所以,如果你以某种奇怪的方式调用了 TestRepGentest_method,而你没有提到,那么 setUpClass 可能就不会被执行。

10

setUpClass 是在 unittest 框架的 2.7 和 3.2 版本中新增的功能。如果你想在更旧的版本中使用它,就需要用 nose 作为你的测试运行工具,而不是 unittest。

2

好的,我得承认这是我的错误。我原本应该使用3.2.1版本,但我却在用3.1.2版本。我现在已经换成正确的版本了,一切都正常,测试也通过了。非常感谢所有回复我的人(抱歉浪费了你们的时间 :-( )。

撰写回答