Python Unittest输出 - 是否可以在每个通过/失败行下打印出Unittest中的打印语句?

10 浏览
0 Comments

Python Unittest输出 - 是否可以在每个通过/失败行下打印出Unittest中的打印语句?

在我的单元测试方法中有很多print语句,我希望能够在控制台输出的每个“ok”行下面看到它们的打印结果。有人知道如何做到这一点吗?谢谢。

0
0 Comments

问题出现的原因是在执行unittests时,输出的print语句无法直接打印在每个pass/fail行下面。这是由于标准输出流(std.io)和标准错误流(std.err)在与终端连接时和重定向到文件时刷新方式不同所导致的。解决方法是重新配置输出流,强制在操作期间刷新它们。

具体的解决方法是在代码中添加以下内容:

import os
import sys
if __name__ == '__main__':
    sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 1)
    sys.stderr = os.fdopen(sys.stderr.fileno(), 'w', 1)
    runner = unittest.TextTestRunner(verbosity=2)
    unittest.main(testRunner=runner)

通过将stdout和stderr重定向到文件描述符1(标准输出)和文件描述符2(标准错误),然后将缓冲区大小设置为1,即可达到刷新输出流的效果。这样就可以在每个pass/fail行下面打印出print语句的输出。

以上是解决该问题的方法,通过重新配置输出流实现在unittests中打印print语句的输出。

0