13

我在尝试通过pudb 调试器调试一些单元测试时遇到了一些麻烦。

测试在 python 上运行良好,但我没有运气用pudb.

我隔离了问题,得到以下示例代码:

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和 with运行python -m pudb.run amodule.py,但这没有区别——没有以一种或另一种方式运行测试。

我应该做一些不同的事情来使用 pudb 调试单元测试吗?

4

3 回答 3

9

尝试在代码中有用的行上放置断点:

from pudb import set_trace; set_trace()

您尝试启动它的方式可能会干扰测试发现和/或不 __name__使用'__main__'.

于 2014-03-14T19:03:48.950 回答
3

由于这是一个流行的问题,我觉得我还应该提一下,大多数测试运行工具会要求您传入一个开关,以防止它捕获标准输出和输入(通常是-s)。

因此,请记住pytest -s在使用 Pytest 或nosetests -sNose时运行python manage.py test -sDjango 测试,或查看测试运行工具的文档。

于 2017-09-26T17:31:28.587 回答
2

您可以通过以下方式更轻松地设置断点:

import pudb; pu.db

于 2017-10-04T14:44:13.027 回答