Python unittest:setUpClass(),tearDownClass(),setUpModule()和tearDownModule()不被调用

时间:2016-11-02 12:57:40

标签: python python-2.7 python-unittest

使用python 2.6.6的unittest模块,如何在所有测试运行后调用代码?

请考虑以下MCVE:

#!/bin/env python
import unittest

def setUpModule():
    print 'setUpModule'

def tearDownModule():
    print 'tearDownModule'

class TestClass(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print 'setUpClass'

    @classmethod
    def tearDownClass(cls):
        print 'tearDownClass'

    def test_trivia(self):
        self.assertTrue(True)

def main():
    """entry point"""
    unittest.main()

if __name__ == '__main__':
    main()

我希望在控制台上看到tearDownClasstearDownModule,但它不会:

$ ./test.py 
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
$

我做错了什么?

1 个答案:

答案 0 :(得分:2)

Python 2.6的答案:

Python 2.6 unittest doc未提及setUpClass,tearDownClass,setUpModule和tearDownModule方法/函数。所以他们可能不受单元测试的支持而根本没有被调用。

然而unittest2似乎从2.4开始支持Python。它可能会为您提供Python 2.6不支持的单元测试功能。

Python 2.7或更高版本的答案:

我认为你没有做错任何事情,并调用了setUp *和tearDown *函数/方法。我认为unittest只是隐藏了打印的字符串。

尝试为您调用unittest.main函数提供详细级别2,它应该解决“问题”:

unittest.main(verbosity=2)