我实际上在从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
内部引发了异常钩法。有什么想法吗?
答案 0 :(得分:2)
我认为你实际上不能阻止测试运行startTest
钩子。 nose2
docs建议使用matchPath
或getTestCaseNames
来执行此操作。以下是使用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
文档实际上明确解释了它如何用于阻止测试运行:
插件可以使用此挂钩来防止加载python模块 通过测试加载器或强制它们由测试加载器加载。组 event.handled为True并返回False以使加载程序跳过 模块。
使用此方法可以防止测试用例被加载。如果您希望测试实际显示在列表中被跳过,而不是根本没有显示在测试列表中,您可以使用StartTestEvent
做一些小问题:
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
在这里,我们用一个什么都不做的虚函数替换测试将要运行的实际函数。这样,当测试执行时,它会禁止操作,然后报告它被跳过。