在使用Python的unittest
模块时,如何暂时禁用单个单元测试?
使用unittest.skip
装饰器,可以禁用单个测试方法或类。
@unittest.skip("reason for skipping")
def test_foo():
print('This is foo test case.')
@unittest.skip # no reason needed
def test_bar():
print('This is bar test case.')
如需其他选项,请参阅跳过测试和预期失败的文档。
@unittest.SkipTest
是有效的,而不是@unittest.skip
。 - lifebalance@unittest.skip
也可以正常工作。 - Pete@unittest.skip
不起作用。 - lifebalance@unittest.skip
不起作用的人:目前不支持使用skip
而没有调用它并提供原因,这样做将会导致测试被标记为成功但未运行。这个问题正在https://bugs.python.org/issue34596上进行讨论。 - Zachary Ware您可以使用装饰器来禁用测试,该测试可以包装函数并防止googletest或Python单元测试运行测试用例。
def disabled(f):
def _decorator():
print f.__name__ + ' has been disabled'
return _decorator
@disabled
def testFoo():
'''Foo test case'''
print 'this is foo test case'
testFoo()
输出:
testFoo has been disabled
只需要在测试方法上方添加@unittest.SkipTest
装饰器即可。
unittest.skip
(无需理由)在Python 2中会报错,但在Python 3中不会。 - Akif最新版本(2.7-未发布)支持跳过/禁用测试,如下所示。您只需获取此模块并在现有的Python安装上使用它。它可能会有效。
在此之前,我通常将要跳过的测试重命名为xtest_testname
,而不是test_testname
。
这里是一个快速的Elisp脚本来实现这个功能。我的Elisp已经有点生疏了,对于任何问题,我提前道歉。未经测试。
(defun disable_enable_test ()
(interactive "")
(save-excursion
(beginning-of-line)
(search-forward "def")
(forward-char)
(if (looking-at "disable_")
(zap-to-char 1 ?_)
(insert "disable_"))))
我刚刚将一个测试用例方法重命名为带下划线的形式:test_myfunc 变成了 _test_myfunc。
(将大写字母替换为您的值)。pytest PYTHON_FILENAME.TEST_CLASS.TEST_NAME
-k
选项来禁用单个(或几个)测试。 - Peter Mortensenunittest
实际上有 -k
选项(从3.7版本开始)。 - Peter Mortensenunittest.SkipTest("跳过原因")
如果您想跳过整个文件而不标记要跳过的单个测试/类,这可能是相关的。只需放置即可。import unittest
raise unittest.SkipTest()
在文件的顶部。(或在需要跳过的测试中)
unittest.case.SkipTest
来跳过测试。 - Mandera