如何在(nose)测试执行期间显示Python警告?
我在用 nose
作为我的 Python 单元测试工具。有一个测试是用来确认非常大的输入文件可以被处理,而不会出现 MemoryError
的错误。这个测试在我的电脑上通过了,但在 Travis(持续集成工具)上,测试运行时间太长没有任何输出,所以 Travis 就停止了这个测试。
为了改善这种情况(并给用户提供更好的提示信息),我开始使用 warnings
模块来在读取大文件时显示警告:
WARNING: file contains greater than 100000 rows
WARNING: file contains greater than 200000 rows
WARNING: file contains greater than 300000 rows
# etc.
这些警告在正常使用程序时会显示出来,但 nose
似乎会捕捉或抑制这些警告。
我该如何在测试运行时显示警告,而不改变 nose
现有的日志捕捉行为呢?
1 个回答
0
要测试警告信息,你可以使用 catch_warnings
这个上下文管理器。这样在测试时,你就可以检查某个函数是否产生了警告。实际上,在测试过程中输出警告并不重要。
在测试中:
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
operate_on_25000_row_file()
assert len(w) == 1
assert "20000 rows" in str(w[-1].message)
你也可以尝试强制打印警告,或者把所有警告当作异常来处理,这样测试运行器就能捕捉到它们:
warnings.simplefilter('always') # always print
# or
warnings.simplefilter('error') # raise exceptions
Travis CI 还 提供了文档,说明如何处理他们服务上的构建超时问题。