暂时禁用单个 Python 单元测试

在 Python 中使用 unittest模块时,如何暂时禁用单个单元测试?

87357 次浏览

医生 for 2.1没有指定忽略或跳过方法。

通常,我会在需要的时候屏蔽评论。

最新版本(2.7-未发布)支持跳过/禁用测试,如 。您可以直接获取这个模块并在现有的 Python 安装中使用它。可能会成功。

在此之前,我曾经将想要跳过的测试从 test_testname重命名为 xtest_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_"))))

您可以使用装饰符禁用可以包装函数的测试,并阻止 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

我只是用下划线重命名了一个测试用例方法: test _ myfunc gets _ test _ myfunc。

可以使用 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装饰器放在测试之上就足够了。

关注问题的“暂时禁用”部分,最佳答案在某种程度上取决于用例。把我带到这里的用例是我正在对一个函数进行测试驱动开发。在这个过程中,我先后编写测试,并经常在函数中使用断点进行调试。如果每次运行测试运行程序时都只运行所有测试,那么对于已经工作的测试,我最终会在断点处停止运行。添加“跳过”或者挂起测试名称或者类似的东西并不是我想要的,因为当我完成编写函数时,我希望所有的测试都运行。如果我使用“跳过”,我将不得不返回并且“不跳过”。

对于我的用例,解决方案在测试运行程序中,而不在测试代码中。我用 派特。使用 pytest,很容易从命令行指定单个测试:

文件名

(用你的价值取代大写字母)。

我知道这个问题是关于 python-unitest 的。我很久没用过了。如果它有类似于派特斯的东西,我不会感到惊讶。如果没有,你可以很容易地切换到 pytest。您不需要修改代码。只需安装它并更改您的测试运行程序命令。

还有,我用的是 PyCharm Pro。在显示测试代码的页面上,每个测试的 def 旁边都有一个小图标。我可以单击那个图标并单独运行那个测试。