如何使用pudb调试单元测试?

14 投票
3 回答
2922 浏览
提问于 2025-04-17 22:21

我在用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.pypython -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__' 的方式运行你的脚本。

撰写回答