考虑这样的unittest
套件:
import unittest
class TestClass(unittest.TestCase):
def test_set_trace(self):
raise Exception
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(TestClass)
unittest.TextTestRunner(verbosity=2).run(suite)
当我在脚本中放入以下内容并像这样运行时:python -m pdb tmp.py
我希望Python调试器能够捕获异常并将我带入test_set_trace
方法,但是unittest
捕获异常并将其隐藏起来pdb
,如此:
$ python -m pdb tmp.py
> tmp.py(1)<module>()
-> import unittest
(Pdb) c
test_set_trace (__main__.TestClass) ... ERROR
======================================================================
ERROR: test_set_trace (__main__.TestClass)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tmp.py", line 5, in test_set_trace
raise Exception
Exception
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (errors=1)
The program finished and will be restarted
> tmp.py(1)<module>()
-> import unittest
(Pdb)
在编写我的测试时这很烦人,因为我需要进入测试代码并手动指定pdb.set_trace()
,然后步入包含实际错误的框架。有没有人知道一个解决方法?在测试代码中放置一个明确的import pdb
没有用,即使我将import语句放在实际的违规方法中。
答案 0 :(得分:3)
<强>调试()强>
运行与此套件关联的测试而不收集 结果。这允许传播测试引发的异常 调用者,可用于支持运行测试 调试器。
替换以下行:
unittest.TextTestRunner(verbosity=2).run(suite)
使用:
suite.debug()