【问题标题】:Django/Python Unit Testing: Let exceptions riseDjango/Python 单元测试:让异常上升
【发布时间】:2017-07-12 14:40:18
【问题描述】:

我正在调试一个单元测试失败,其中一些库的内部引发了异常;许多例外。我在命令行中使用ipdb 来调试它。

当运行./manage.py test path.to.test 并发生异常时,测试运行程序会捕获异常,打印堆栈跟踪并标记测试失败或其他情况。我明白为什么这是有用的,而不是让异常上升。

在我的情况下,我希望它上升,以便ipdb 抓住它并让我处于一个很好的位置来向上/向下移动帧并调试问题。我不想继续在try 中包装测试或将ipdb.set_trace() 调用放在引发异常的地方。这是一种痛苦,它正在减慢调试速度。通常这不是问题,但今天是。

问:我可以停止测试运​​行程序捕获异常,以便 ipdb 捕获它而不修改代码吗?

我觉得应该有一种方法可以做到这一点,因为它在调试时会非常有帮助,但是我在某个地方错过了它。

(Ps,Python 2.7,Django 1.6 sadface

【问题讨论】:

  • 是否可以选择使用 pytest 作为跑步者? docs.pytest.org/en/latest/… 它有一个特定的冒泡到 pdb 的选项。
  • 只是出于好奇...您会选择使用 Pycharm 吗?您可能会发现使用它来设置断点要容易得多
  • @Sayse 我正在使用魅力,但由于某种原因(可能是代码库的巨大规模),使用魅力的断点和调试器运行测试的速度愚蠢缓慢。浪费了更多时间,所以我倾向于只使用 ipdb。
  • @MattSeymour 谢谢你的提示,我会看看pytest-django.readthedocs.io/en/latest

标签: python django unit-testing debugging


【解决方案1】:

存在 django-nose,一个 django unittest runner,它仍然支持 django 1.6 和 python 2.7。

鼻子有一个--pdb 选项:

在出现故障或错误时进入调试器

你可以按如下方式运行它:

nosetests --pdb

由于您想使用ipdb,所以存在this nose plugin,它允许nose 使用ipdb

nosetests --ipdb

【讨论】:

  • 看起来很有希望,我会检查一下,感谢您的回答+1
  • 祝你好运 :) @AidenBell
  • 不走运,1.6(至少我们拥有的版本 ... vendored :( )不兼容,并且通过 django-nose 版本返回没有运气。耻辱,可能会插入它并尝试找到一种解决方法,因为插件看起来很有希望。
猜你喜欢
  • 2014-03-13
  • 1970-01-01
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2018-01-12
  • 2013-10-10
相关资源
最近更新 更多