暂时禁用单个Python单元测试

时间:2010-01-14 18:26:26

标签: python python-unittest

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

7 个答案:

答案 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旁边都有一个小图标。我可以单击该图标并单独运行该测试。