单元测试中的异常不会被Python调试器捕获

时间:2013-12-24 05:37:45

标签: python unit-testing python-2.7 pdb

考虑这样的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语句放在实际的违规方法中。

1 个答案:

答案 0 :(得分:3)

使用TestSuite.debug

  

<强>调试()

     

运行与此套件关联的测试而不收集   结果。这允许传播测试引发的异常   调用者,可用于支持运行测试   调试器。


替换以下行:

unittest.TextTestRunner(verbosity=2).run(suite)

使用:

suite.debug()