如何在运行时跳过整个Python单元测试模块?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (136)

我希望我的PythonUnittest模块告诉测试运行程序在某些情况下跳过它的全部(例如无法导入模块或找到关键资源)。

我可以用@unittest.skipIf(...)跳过一个单元测试。类,但如何跳过整个模块吗?对每个类应用跳过是不够的,因为如果模块无法导入,类定义本身就会导致异常。

提问于
用户回答回答于

假设您正在讨论使用nosetests-x来运行测试,它应该通过跳过的测试继续进行。

import unittest
try:
    import PyQt4
    # the rest of the imports


    # actual tests go here.
    class TestDataEntryMixin(unittest.TestCase):
        def test_somefeature(self):
            # ....

except ImportError, e:
    if e.message.find('PyQt4') >= 0:
        class TestMissingDependency(unittest.TestCase):

            @unittest.skip('Missing dependency - ' + e.message)
            def test_fail():
                pass
    else:
        raise

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

如果导入失败,它将用一个简单跳过的测试替换测试运行。我还试图确保它不会无意中捕获任何异常。这个解决方案在很大程度上要归功于对这个问题的所有其他答案和评论。

如果您在详细模式下运行它,则当它跳过时会看到以下结果:

test_fail (test_openihm_gui_interface_mixins.TestMissingDependency) ... skipped 'Missing dependency - No module named PyQt4'
用户回答回答于
import unittest
try:
    # do thing
except SomeException:
    raise unittest.SkipTest("Such-and-such failed. Skipping all tests in foo.py")

运行结果:

Failure: SkipTest (Such-and-such failed. Skipping all tests in foo.py) ... SKIP:
Such-and-such failed. Skipping all tests in foo.py

----------------------------------------------------------------------
Ran 1 test in 0.002s

OK (SKIP=1)

扫码关注云+社区

领取腾讯云代金券