我认为您实际上无法阻止使用startTest
钩子运行测试。nose2
文档建议使用或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
在这里,我们将测试要运行的实际函数替换为什么都不做的虚拟函数。这样,当测试执行时,它没有操作,然后报告它被跳过。