Python单元测试:setUpClass()、tearDownClass()、setUpModule() 和 tearDownModule() 未被调用

Python unittest: setUpClass(), tearDownClass(), setUpModule() and tearDownModule() are not called

使用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
$

我做错了什么?

Python2.6 的答案:

Python 2.6 unittest doc没有提到setUpClass、tearDownClass、setUpModule和tearDownModulemethods/functions。所以它们可能不被 unittest 支持并且根本没有被调用。

不过unittest2似乎从2.4开始支持Python。它可能会为您带来 unittest for Python 2.6 不支持的功能。


Python2.7 或更高版本的答案:

我认为您没有做错什么,调用了 setUp* 和 tearDown* functions/methods。我认为 unittest 只是隐藏了打印的字符串。

尝试为您对 unittest.main 函数的调用提供 2 级详细信息,它应该修复 "problem":

unittest.main(verbosity=2)