10.信号处理

2018-11-07  本文已影响0人  MirrorAi

新增于3.2。

unittest的-c/--catch命令行选项以及unittest.main()catchbreak参数在测试运行期间提供了更友好的control-C处理。启用catch中断行为后,control-C将允许当前正在运行的测试完成,然后测试运行将结束并报告所有结果。第二个control-c将以通常的方式引发KeyboardInterrupt

control-c处理信号处理程序试图与安装的signal.SIGINT处理程序的代码或测试保持兼容。如果调用unittest处理程序但不是已安装的signal.SIGINT处理程序,换句话说它已被被测系统替换并委托给它,则它调用默认处理程序。这通常是代码替换已安装的处理程序并委托给它的预期行为。对于需要禁用unittest的control-c处理的单个测试,可以使用removeHandler()装饰器。

框架作者有一些实用程序函数可以在测试框架中启用control-c处理功能。


unittest.installHandler()
安装control-c处理程序。当收到signal.SIGINT时(通常是响应用户按下control-c),所有注册的结果都会调用stop()


unittest.registerResult(result)
为control-c处理注册一个TestResult对象。注册结果会存储对它的弱作用,因此不会阻止结果被垃圾回收。
如果未启用control-c处理,则注册TestResult对象没有副作用,因此测试框架可以无条件地注册它们创建的所有结果,而与是否启用处理无关。


unittest.removeResult(result)
删除注册结果。删除结果后,将不再在该结果对象上调用stop()来响应control-c。


unittest.removeHandler(function=None)
当不带参数调用时,如果已安装control-c处理程序,则此函数将删除它。此函数还可以用作测试装饰器,以便在执行测试时删除处理程序:

@unittest.removeHandler
def test_signal_handling(self):
  ...
上一篇下一篇

猜你喜欢

热点阅读