在我选择的测试库之前 unittest 。它正在使用我最喜欢的调试器 - Pudb 。不是Pdb !!!
要将 Pudb 与 unittest 一起使用,我会在代码行之间粘贴import pudb;pudb.set_trace()
。
然后我执行python -m unittest my_file_test
,其中 my_file_test 是 my_file_test.py 文件的模块表示。
简单地使用nosetests my_file_test.py
赢得了工作 - AttributeError: StringIO instance has no attribute 'fileno'
将被抛出。
py.test 不起作用:
py.test my_file_test.py
也不
python -m pytest my_file_test.py
抛出ValueError: redirected Stdin is pseudofile, has no fileno()
有关如何将 Pudb 与 py.test
一起使用的任何想法答案 0 :(得分:15)
只需添加 -s 标志就不会替换stdin和stdout,并且可以访问调试,即py.test -s my_file_test.py
可以解决问题。
在ambi提供的文档中,也有人说,以前使用显式的 -s 也需要常规 pdb ,现在 -s 标志隐含地与 - pdb 标志一起使用。
但 py.test 并不隐式支持 pUdb ,因此需要设置-s。
答案 1 :(得分:9)
更新的答案是,现在an adapter library available公开--pudb
跟踪选项,类似于--pdb
跟踪选项。当然,更通用的-s
选项仍然是来自任何调试器的手动放置断点的有效解决方案。
要使用,pip install pytest-pudb
然后通过py.test --pudb
执行Pytest。此外,如果安装了此适配器,则无需import pudb; pudb.set_trace()
或-s
即可支持--capture=no
功能。