10.信号处理

新增于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):
  ...
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,993评论 19 139
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,467评论 0 5
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,926评论 0 5
  • Annimal Math竟然玩到了一年级,第三关遇见了奇偶数,花了好几天琢磨加试验,发现这仍然是可理解的,并且,可...
    衔草阅读 1,122评论 0 6
  • 今天聊聊,如何管理孩子的“求胜心”? 最近我和恩仔重拾皇室战争(Clash Royale)这个游戏,这是一个排列组...
    茉莉大大阅读 126评论 0 0