python unittest runner处理所有异常。我想用我的调试器来捕获它们。
有没有办法让我的unittest跑步者重新提高测试异常以终止进程? 我想自己处理它们。
修改:找到解决方案。
您可以创建unittest.TestSuite并调用debug()来运行您要调试的测试 - 包括使用调试器捕获异常!
使用这种模式可以轻松完成:
import unittest
class DebuggableTestCase(unittest.TestCase):
@classmethod
def debugTestCase(cls):
loader = unittest.defaultTestLoader
testSuite = loader.loadTestsFromTestCase(cls)
testSuite.debug()
class MyTestCase(DebuggableTestCase):
def test_function_that_fails(self):
raise Exception('test')
if __name__ == '__main__':
MyTestCase.debugTestCase()
答案 0 :(得分:2)
问题本身的解决方案并不是很好的IMO:
我的解决方案更多" hacky",但它没有提到缺点。此外,只有在调试器下运行测试时,测试行为才会发生变化。
如果测试不期望异常,则在异常处理程序中调用unittest.TestResult.addError。我重新定义了这个方法来重新引发正在处理的异常。
我将此类用作测试用例的父级:
class DebuggableTestCase(unittest.TestCase):
def __add_error_replacement(self, _, err):
value, traceback = err[1:]
raise value.with_traceback(traceback)
def run(self, result=None):
if result and sys.gettrace() is not None:
result.addError = self.__add_error_replacement
super().run(result)
使用Python 3.4和PyCharm 3.4测试解决方案
答案 1 :(得分:2)
我知道这是一个老线程,当问到这个问题时,也许其中一些事情并不存在。但仅限后人......
You can run your unittest
tests with py.test as a test runner.您可以立即获得一些great features。直接到你的问题,有一些很好的方法来调试py.test,包括使用PyCharm。
具体到调试任何失败,验尸,使用PyCharm - 您要求的 - 您可以安装pytest-pycharm
插件。
pip install pytest-pycharm
(我在每个项目的virtualenv工作,所以这对我来说没有任何缺点。我建议你这样做。否则,请注意你在全球安装它,这个插件将对所有使用的项目都是活跃的这个Python插件。)
另见:
答案 2 :(得分:1)
如果你想要的是检查unittest失败的原因,你真的不需要提出异常。
只需在发生异常的行设置断点并在调试模式下运行。 PyCharm将进入调试屏幕,让您检查变量和调用堆栈。