23

在我选择的测试库是unittest之前。它与我最喜欢的调试器 - Pudb 一起工作。不是pdb!!!

要将Pudbunittestimport pudb;pudb.set_trace()一起使用,我在代码行之间粘贴。然后我执行了python -m unittest my_file_test,其中my_file_testmy_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()

关于如何将Pudbpy.test一起使用的任何想法

4

2 回答 2

26

只需添加-s标志 pytest 不会替换标准输入和标准输出,并且可以进行调试,即pytest -s my_file_test.py可以解决问题。

在 ambi 提供的文档中,还说以前显式使用-s也需要用于常规pdb,现在-s标志与--pdb标志隐式使用。

但是pytest并不隐式支持pUdb,因此需要设置 -s 。

于 2014-08-07T12:56:07.493 回答
10

一个更新的答案是,现在有一个适配器库可用于公开--pudb与此类似的跟踪选项--pdb。当然,更通用的-s选项仍然是从任何调试器手动放置断点的有效解决方案。

要使用,pip install pytest-pudb然后通过py.test --pudb. 此外,import pudb; pudb.set_trace()无需-s--capture=no如果安装此适配器即可支持功能。

于 2017-02-21T16:53:20.233 回答