在Python中使用unittest
模块时,如何暂时禁用单个单元测试?
答案 0 :(得分:167)
可以使用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.')
有关其他选项,请参阅Skipping tests and expected failures的文档。
答案 1 :(得分:25)
您可以使用装饰器来禁用可以包装该函数的测试,并阻止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
答案 2 :(得分:11)
The latest version (2.7 - unreleased) supports test skipping/disabling like so。您可以获得此模块并在现有的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_"))))
答案 3 :(得分:8)
只需将@unittest.SkipTest
装饰器置于测试之上即可。
答案 4 :(得分:5)
我只是用下划线重命名测试用例方法:test_myfunc变为_test_myfunc。
答案 5 :(得分:3)
2.1的docs没有指定忽略或跳过方法。
通常,我会在需要时阻止评论。
答案 6 :(得分:0)
针对问题的“暂时禁用”部分,最佳答案在某种程度上取决于用例。这里带给我的用例是我正在对功能进行测试驱动的开发。在此过程中,我连续编写测试,并经常在函数中使用断点进行调试。如果我每次运行测试运行程序时都运行所有测试,那么我最终会在已经起作用的测试的断点处停止。我不想添加“跳过”或修改测试名称或类似名称,因为完成函数编写后,我希望所有测试都可以运行。如果我使用“跳过”,则必须返回并“跳过”。
对于我的用例,解决方案在于测试运行器,而不是测试代码。我使用pytest。使用pytest,可以从命令行轻松指定一个测试:
pytest PYTHON_FILENAME.TEST_CLASS.TEST_NAME
(将大写替换为您的值)。
我知道这个问题是针对python-unitest的。我已经很久没有使用它了。如果它与pytest类似,我不会感到惊讶。如果没有,您可以轻松切换到pytest。您无需修改代码。只需安装它并更改您的测试运行器命令即可。
我还使用PyCharm Pro。在显示我的测试代码的页面上,每个测试的def旁边都有一个小图标。我可以单击该图标并单独运行该测试。