Unittest setUpClass不工作

时间:2011-08-11 04:19:04

标签: python unit-testing python-3.x

我正在尝试开始使用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 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:5)

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

如果是这种情况,您必须手动调用setUpClass() - 它不会自动调用。

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

此外,还要the docs class-level fixtures are implemented by the test suite。因此,如果您以某种奇怪的方式致电TestRepGentest_method而未发布,setUpClass可能无法投放。

答案 2 :(得分:1)

好的 - 现在是时候承认这是我的错误了。当我应该(并且认为我是)使用3.2.1时,我正在使用3.1.2。我现在已经改为正确的版本,一切都很好,测试正在通过。非常感谢所有回复的人(抱歉浪费你的时间:-()。