如何使用pudb调试单元测试?
我在用pudb调试器调试一些单元测试时遇到了一些麻烦。
这些测试在普通的python环境下运行得很好,但用
我找到了问题的所在,下面是一个示例代码:
class Math:
def pow(self, x, y):
return x ** y
import unittest
class MathTest(unittest.TestCase):
def testPow23(self):
self.assertEquals(8, Math().pow(2, 3))
def testPow24(self):
self.assertEquals(16, Math().pow(2, 4))
if __name__ == '__main__':
unittest.main()
这些测试运行得很好:
$ python amodule.py
.
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
但是如果通过pudb运行,就会出现以下输出:
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
我尝试过用pudb amodule.py
和python -m pudb.run amodule.py
来运行,但结果没有区别——无论哪种方式都没有测试被执行。
我是不是应该用其他方法来调试使用pudb的单元测试呢?
3 个回答
2
你可以更简单地设置一个断点,方法是:
import pudb; pu.db
2
因为这是一个常见的问题,我觉得有必要提一下,大多数测试运行工具都需要你加一个选项,这样它才不会捕捉标准的输出和输入(通常这个选项是 -s
)。
所以,记得在使用 Pytest 时运行 pytest -s
,在使用 Nose 时运行 nosetests -s
,在进行 Django 测试时运行 python manage.py test -s
,或者查看你所用测试工具的文档。
9
试着在你代码中一个有用的地方设置一个断点:
from pudb import set_trace; set_trace()
你尝试启动代码的方式可能会影响到测试的发现,或者没有以 __name__
为 '__main__'
的方式运行你的脚本。