【问题标题】:How to debug unittests with pudb debugger?如何使用 pudb 调试器调试单元测试?
【发布时间】:2014-03-14 17:56:02
【问题描述】:

我在尝试通过 pudb debugger 调试某些单元测试时遇到了一些问题。

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

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

【问题讨论】:

  • @LukasGraf 很好,做到了,谢谢!请将此作为答案发布,以便我给你信用。 =)
  • 太好了,很高兴它成功了:)

标签: python python-unittest pudb


【解决方案1】:

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

from pudb import set_trace; set_trace()

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

【讨论】:

  • 那么事后调试呢?我确实曾经像pudb myprogram params 这样调用程序,它在第一个错误中停止。我们可以对 pudbunittests 做同样的事情吗?我的意思是在第一个错误处停止并进行事后调试?
  • @yucer 这将取决于您的测试运行者。如果你使用pytest,你可以安装这个插件pypi.org/project/pytest-pudb然后运行pytest --pudb
【解决方案2】:

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

所以,请记住在使用 Pytest 时运行 pytest -s,或在 Nose 中运行 nosetests -s,在 Django 测试中运行 python manage.py test -s,或者查看测试运行工具的文档。

【讨论】:

    【解决方案3】:

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

    import pudb; pu.db

    【讨论】:

      猜你喜欢
      • 2018-10-29
      • 1970-01-01
      • 2015-12-21
      • 2011-06-19
      • 2011-06-03
      • 2013-05-08
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多