新增于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):
...
网友评论