codecamp

unittest 信号处理

3.2 版中的新功能。

unittest 的 -c/--catch 命令行选项以及 unittest.main() 的 catchbreak 参数在测试运行期间提供了对 control-C 的更友好的处理。启用 catch break 行为后,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)

注册一个 TestResult 对象以进行 control-c 处理。注册结果会存储对它的弱引用,因此它不会阻止结果被垃圾收集。

如果未启用 control-c 处理,则注册 TestResult 对象没有副作用,因此测试框架可以无条件地注册它们创建的所有结果,而与是否启用处理无关。

unittest.removeResult(result)

删除已注册的结果。一旦结果被删除,将不再在该结果对象上调用 stop() 以响应 control-c。

unittest.removeHandler(function=None)

当不带参数调用此函数时,如果已安装 control-c 处理程序,则该函数将删除它。此函数也可以用作测试装饰器,以在执行测试时临时删除处理程序:

@unittest.removeHandler
def test_signal_handling(self):
    ...


unittest 类和模块夹具
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

unittest 类和函数

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }