Pycharm单元测试交互式调试命令行不起作用

Sle*_*lls 42 debugging unit-testing pycharm

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

>>> print "a"
>>> import sys
>>> sys.stderr.write("moof")
moof
>>> sys.stdout.write("moof")
>>> sys.stderr.write("test")
test
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?我真的很喜欢交互式调试控制台,如果它在调试单元测试时表现良好也会很棒.

Int*_*nti 86

这可能是因为您的测试运行器正在捕获stdout而不是stderr.

我使用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
Run Code Online (Sandbox Code Playgroud)

注意:该-s标志同样可用于鼻子测试

  • (Run > Edit Configurations > Defaults > Python tests > py.test > add -s to the options field------>(Additional Arguments).) pytest 设置默认运行测试: (Preferences > Tools > Python Intergrated Tools > 默认测试运行程序) (4认同)
  • 除了修改默认值之外,您还需要修改现有的运行配置.`运行>编辑配置> Python测试>"my_test_case.py中的py.test"`添加-s到"附加参数"字段. (2认同)