13

有了这个unittest模块,我喜欢跳过测试的特性,但它只在 Python 2.7+ 中可用。

例如,考虑test.py

import unittest
try:
    import proprietary_module
except ImportError:
    proprietary_module = None

class TestProprietary(unittest.TestCase):
    @unittest.skipIf(proprietary_module is None, "requries proprietary module")
    def test_something_proprietary(self):
        self.assertTrue(proprietary_module is not None)

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

如果我尝试使用早期版本的 Python 运行测试,我会收到错误消息:

Traceback (most recent call last):
  File "test.py", line 7, in <module>
    class TestProprietary(unittest.TestCase):
  File "test.py", line 8, in TestProprietary
    @unittest.skipIf(proprietary_module is None, "requries proprietary module")
AttributeError: 'module' object has no attribute 'skipIf'

有没有办法“欺骗”旧版本的 Python 以忽略 unittest 装饰器并跳过测试?

4

3 回答 3

6

unittest2 是 Python 2.7 中添加到 unittest 测试框架的新功能的反向移植。它经过测试可在 Python 2.4 - 2.7 上运行。

要使用 unittest2 而不是 unittest 只需将 import unittest 替换为 import unittest2

参考: http: //pypi.python.org/pypi/unittest2

于 2012-06-12T06:09:27.690 回答
5

一般来说,我建议不要使用unittest,因为它没有真正的 pythonic API。

一个好的 Python 测试框架是nose. 您可以通过引发SkipTest异常来跳过测试,例如:

if (sys.version_info < (2, 6, 0)):
    from nose.plugins.skip import SkipTest
    raise SkipTest

这适用于 Python 2.3+

鼻子还有很多特点:

  • 你不需要上课。一个函数也可以是一个测试。
  • 固定装置的装饰器(设置,拆卸功能)。
  • 模块级夹具。
  • 期待异常的装饰器。
  • ...
于 2012-06-12T08:02:44.080 回答
2

使用if语句怎么样?

if proprietary_module is None:   
    print "Skipping test since it requires proprietary module"
else:
    def test_something_proprietary(self):
        self.assertTrue(proprietary_module is not None)
于 2012-06-12T06:02:32.843 回答