[英]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
文档建议使用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
文档实际上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.