繁体   English   中英

从Nose2插件中跳过单元测试

[英]Skip a unit test from a Nose2 Plugin

我实际上在从Nose2插件中跳过单元测试时遇到了麻烦。 我能够将测试标记为跳过并在最终结果中查看原因,但测试仍然运行。 只要插件处于活动状态,此示例代码基本上应该跳过任何测试。

from nose2.events import Plugin

class SkipAllTests(Plugin):
    def startTest(self, event):
        event.result.addSkip(event.test, 'skip it')
        event.handled = True

如果我调用event.test.skipTest('reason')它实际上会引发SkipTest异常,它只是异常没有被测试运行器捕获,它只是在我的startTest钩子方法中引发。 有任何想法吗?

我不认为你实际上可以阻止测试使用startTest钩子运行。 nose2文档建议使用matchPathgetTestCaseNames来执行此操作。 这是一个使用matchPath的工作示例:

from nose2.events import Plugin

class SkipAllTests(Plugin):
    configSection = "skipper"
    commandLineSwitch = (None, 'skipper', "Skip all tests")

    def matchPath(self, event):
        event.handled = True
        return False

matchPath文档实际上matchPath地解释了它如何用于阻止测试运行:

插件可以使用此钩子来防止测试加载器加载python模块或强制它们由测试加载器加载。 将event.handled设置为True并返回False以使加载程序跳过该模块。

使用此方法将阻止测试用例被加载。 如果你希望测试实际上在列表中显示为跳过,而不是根本没有显示在测试列表中,你可以使用StartTestEvent做一些hackery:

def dummy(*args, **kwargs):
    pass

class SkipAllTests(Plugin):
    configSection = "skipper"
    commandLineSwitch = (None, 'skipper', "Skip all tests")
    def startTest(self, event):
        event.test._testFunc = dummy
        event.result.addSkip(event.test, 'skip it')
        event.handled = True

在这里,我们用一个什么都不做的虚函数替换测试将要运行的实际函数。 这样,当测试执行时,它会禁止操作,然后报告它被跳过。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM