如何在(鼻子)测试执行期间显示Python警告?

时间:2014-10-24 13:52:19

标签: python nose

我使用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现有的日志记录捕获行为?

1 个答案:

答案 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如何处理他们服务的构建超时。