Django/Python单元测试:让异常引发

3
我正在调试一个单元测试失败的问题,其中一些库的内部引发了许多异常。我正在使用命令行中的 ipdb 进行调试。
当运行 ./manage.py test path.to.test 并且出现异常时,测试运行器会捕获异常,打印堆栈跟踪,并标记测试失败或其他操作。我知道这很有用,而不是让异常继续上升。
在我的情况下,我希望它上升,这样 ipdb 就可以捕获它,并将我带到一个好的位置来移动上下文框架并调试问题。我不想在异常抛出的地方不断包装测试,也不想在那里放置 ipdb.set_trace() 调用。这很麻烦,也会减慢调试速度。通常这不是问题,但今天是。
问:我能否停止测试运行器捕获异常,以便 ipdb 捕获它而无需进行代码修改?
我觉得应该有一种方法可以做到这一点,因为在调试时这将非常有用,但我可能错过了某些内容。
(Ps,Python 2.7,Django 1.6)

使用pytest作为你的测试运行器是一个选项吗?https://docs.pytest.org/en/latest/usage.html#dropping-to-pdb-python-debugger-on-failures 它有一个针对pdb的特定选项。 - Matt Seymour
只是出于好奇...使用Pycharm对你来说是否是一个选项?你可能会发现使用它来设置断点会更容易。 - Sayse
1
@Sayse 我正在使用Charm,但由于代码库太大的原因,使用Charm的断点和调试器运行测试非常慢。这浪费了很多时间,所以我倾向于使用ipdb。 - Aiden Bell
1
@MattSeymour 感谢你的提示,我会查看 http://pytest-django.readthedocs.io/en/latest/。 - Aiden Bell
请参考以下链接:https://dev59.com/5XNA5IYBdhLWcg3wBpHs#6880214 - Aiden Bell
1个回答

1

存在一个名为django-nose的Django unittest runner,它仍然支持Django 1.6和Python 2.7。

nose还有一个--pdb选项,可以在失败或错误时进入调试器:

在失败或错误时进入调试器

您可以按以下方式运行它:

nosetests --pdb

由于您想使用 ipdb,因此存在 这个 nose 插件,它允许 nose 使用 ipdb

nosetests --ipdb

看起来很有前途,我会去查看一下,感谢您的回答 +1。 - Aiden Bell
祝你好运 :) @AidenBell - John Moutafis
很遗憾,1.6版本(至少我们拥有的版本)不兼容且无法正常工作。即使尝试回溯django-nose的版本也没有结果。这很遗憾,但我们会尝试解决问题并找到一个可行的替代方案。 - Aiden Bell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接