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

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

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

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

提问于
用户回答回答于

如果您查看unittest.skipIfunittest.skip,你可以看到关键是raise unittest.SkipTest(reason)当测试被执行时。如果你不介意它出现在1跳过测试,而不是在测试器中的几个测试,您可以简单地引发unittest.SkipTest

import unittest
try:
    # do thing
except SomeException:
    raise unittest.SkipTest("Such-and-such failed. Skipping all tests in foo.py")nosetests -v给予:
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)
用户回答回答于

将整个测试套件嵌入到异常处理中,但它似乎可以做您想做的事情。特别是在导入不起作用时跳过测试。

假设您正在讨论使用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'

扫码关注云+社区

领取腾讯云代金券