我在实际跳过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
钩子方法内部引发。
2条答案
按热度按时间yzuktlbb1#
我不认为你真的可以用
startTest
钩子阻止测试运行。nose2
文档建议使用matchPath
或getTestCaseNames
来做到这一点。下面是一个使用matchPath
的工作示例:matchPath
文档实际上明确解释了如何使用它来停止测试运行:插件可以使用此钩子来阻止测试加载器加载python模块,或者强制测试加载器加载它们。将event.handled设置为True并返回False,以使加载器跳过该模块。
使用这个方法可以防止测试用例被加载。如果你想让测试在列表中显示为被跳过,而不是根本不显示在测试列表中,你可以对
StartTestEvent
做一些修改:在这里,我们用一个什么都不做的伪函数来替换测试将要运行的实际函数。这样,当测试执行时,它没有操作,然后报告它被跳过了。
3bygqnnd2#
我遇到了同样的问题,我的解决方案是: