我使用nose
作为我的Python单元测试运行器。我的一个测试证实,可以处理非常大的输入文件而不会导致MemoryError
。测试在我的机器上通过,但在Travis(CI)上,测试运行的时间太长而没有输出,因此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
现有的日志记录捕获行为?
答案 0 :(得分: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还documents如何处理他们服务的构建超时。