154

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

4

7 回答 7

285

可以使用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.')

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

于 2013-04-22T02:30:23.333 回答
27

您可以使用装饰器来禁用可以包装函数的测试并阻止 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
于 2010-01-14T18:59:11.750 回答
14

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

于 2017-02-24T03:18:13.123 回答
11

最新版本(2.7 - 未发布)支持像这样跳过/禁用测试。您可以获取此模块并在现有的 Python 安装中使用它。它可能会起作用。

在此之前,我曾经将想要跳过的测试重命名为xtest_testnamefrom 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_"))))
于 2010-01-14T18:30:47.830 回答
5

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

于 2010-01-14T19:05:43.653 回答
2

2.1的文档没有指定忽略或跳过方法。

通常,我会在需要时阻止评论。

于 2010-01-14T18:30:01.870 回答
1

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

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

pytest PYTHON_FILENAME.TEST_CLASS.TEST_NAME

(用您的值替换大写字母)。

我知道那个问题是针对 python-unitest 的。我已经很长时间没有使用它了。如果它有类似于 pytest 的东西,我不会感到惊讶。如果没有,您可以轻松切换到 pytest。您无需修改​​代码。只需安装它并更改您的测试运行程序命令。

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

于 2019-02-06T19:11:53.957 回答