暂时禁用单个Python单元测试


Answers:


229

单个测试方法或类都可以使用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.')

有关其他选项,请参阅文档“ 跳过测试和预期的失败”


9
在Python 3中,Akif的以下答案@unittest.SkipTest行不通@unittest.skip
生命平衡

7
我正在使用Python 3.6.1,并且@unittest.skip工作正常。
皮特

2
在Python 3.4.0中,@ Pete @unittest.skip不起作用。
生命平衡'17

如何防止子类被跳过?
reubenjohn

注释将仅应用于单个测试方法。您是否打算使用测试方法作为父类,而只有某些子类禁用该方法?我想这是可能的,尽管您可能需要适当地设计父/子类。您可以通过玩具示例阐明要解决的方案吗?
yoni,

26

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

11

最新版本(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_"))))

+1,但是在我正在工作的整个项目中,每个人都在使用python v2.6.2,并且我认为这不会改变:/,但这是一个解决方案,谢谢
coelhudo 2010年

您可以稍微调整一下编辑器,以便为您提供一个启用/禁用测试用例的宏,但我以Emacs用户的身份发言... :)
Noufal Ibrahim 2010年

我也是Emacs用户,您是否创建了宏?
coelhudo

不。我只是让他们失败,但这并不难。我已经用快捷方式更新了答案。
Noufal Ibrahim 2010年

这个公认的答案不是答案,而只是一个链接。真正的当前答案也不是最高投票者。当然,它已经4岁了。无缘无故的省略只是混淆了。
jwd630

10

只需将@unittest.SkipTest装饰器放在测试之上就足够了。


我不知道是谁做的。但是,我在阅读文档时说SkipTest是一个例外。无论如何,它与unittest.skip的不同之处在于,skip永远不会执行测试(将其禁用),而如果在执行测试期间发生意外情况,则将提高SkipTest目的。我对吗?有趣的强硬。
coelhudo

unittest.skip(没有理由)给我Python 2错误,但没有给我Python 3错误
。– Akif

5

我只是用下划线将测试用例方法重命名:test_myfunc变成_test_myfunc。



1

专注于问题的“暂时禁用”部分,最佳答案在某种程度上取决于用例。这里带给我的用例是我正在对功能进行测试驱动的开发。在此过程中,我连续编写测试,并经常在函数中使用断点进行调试。如果我每次运行测试运行程序时都运行所有测试,那么最终我会在已经生效的测试的断点处停止。我不需要添加“跳过”或修改测试名称或类似名称,因为当我编写完函数后,我希望所有测试都可以运行。如果使用“跳过”,则必须返回并“跳过”。

对于我的用例,解决方案在于测试运行器,而不是测试代码。我用pytest。使用pytest,可以从命令行轻松指定一个测试:

pytest PYTHON_FILENAME.TEST_CLASS.TEST_NAME

(将大写替换为您的值)。

我了解该问题是针对python-unitest的。我已经很久没有使用它了。如果它与pytest类似,我不会感到惊讶。如果没有,您可以轻松切换到pytest。您无需修改​​代码。只需安装它并更改您的测试运行器命令。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.