44

在调试单元测试时(通过 pycharm 测试运行器),可以打开交互式命令行,但是(与调试常规脚本时不同)输入的命令不会产生任何输出。事实上,似乎 stdout 正在某处被捕获,因为 stderr 按预期工作:

>>> print "a"
>>> import sys
>>> sys.stderr.write("moof")
moof
>>> sys.stdout.write("moof")
>>> sys.stderr.write("test")
test

这是预期的行为吗?我真的很喜欢交互式调试控制台,如果它在调试单元测试时表现得很好,那就太棒了。

4

4 回答 4

90

这可能是因为您的测试运行程序正在捕获标准输出而不是标准错误。

我使用py.test捕获标准输出和标准错误,所以我根本看不到任何输出。如果我想查看输出,我必须将-s标志传递给我的 py.test 运行器,这可以通过修改运行/调试配置并将此标志添加到选项字段来完成。(运行 > 编辑配置 > 默认值 > Python 测试 > py.test > 添加-s到“附加参数”字段。)

>>> print 'a'
a
>>> import sys
>>> sys.stderr.write('moof')
moof
>>> sys.stdout.write('moof')
moof
>>> sys.stderr.write('test')
test

注意:该-s标志同样可以与鼻子测试一起使用

于 2013-07-23T12:33:48.280 回答
4

如果您不想在每次运行测试时更改运行/调试配置,可以将 JB_DISABLE_BUFFERING 环境变量设置为“-s”。如果您使用 ^+SHIFT+D 快捷方式在编辑器中调试当前文件的测试,这很有用。

于 2018-07-09T15:52:16.290 回答
3

对于单元测试,您可以将“--capture=no”添加到 Pycharm 运行/调试配置 - 这将实时显示所有输出

于 2015-03-06T16:27:25.823 回答
0

单元测试通常不能与调试器结合使用,除非你明确地声明它们要被调试。为此,请使用装饰器“@unittest.debug”。

s。还https://docs.python.org/3/library/unittest.html#organizing-tests了解有关此主题的更多信息。

于 2020-08-03T16:04:32.823 回答