Python 有没有办法用PyCharm捕获单元测试异常?
python unittest运行程序处理所有异常。我想用我的调试器捕捉它们 有没有办法让我的unittest runner重新引发测试异常以终止进程? 我想自己处理 编辑:找到解决方案 您可以创建unittest.TestSuite并调用以运行要调试的测试,包括使用调试器捕获异常 使用此模式可以轻松完成:Python 有没有办法用PyCharm捕获单元测试异常?,python,unit-testing,debugging,exception,pycharm,Python,Unit Testing,Debugging,Exception,Pycharm,python unittest运行程序处理所有异常。我想用我的调试器捕捉它们 有没有办法让我的unittest runner重新引发测试异常以终止进程? 我想自己处理 编辑:找到解决方案 您可以创建unittest.TestSuite并调用以运行要调试的测试,包括使用调试器捕获异常 使用此模式可以轻松完成: import unittest class DebuggableTestCase(unittest.TestCase): @classmethod def debugTes
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()
如果您想要检查unittest失败的原因,那么实际上不需要引发异常
只需在异常发生的行上设置一个断点,并在调试模式下运行。PyCharm将跳转到调试屏幕,让您检查变量和调用堆栈 添加到问题本身的解决方案在IMO中不是很好:
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)
这个解决方案是用Python3.4和PyCharm 3.4测试的,我知道这是一个旧的线程,当问到这个问题时,其中一些东西可能不存在。但只是为了子孙后代
你会从盒子里拿出来的。直接说到您的问题,有几种很好的方法可以使用py.test进行调试,包括PyCharm
特别是为了在任何失败时进行事后调试,您可以安装pytest-PyCharm
插件
pip install pytest-pycharm
(我正在为每个项目使用virtualenv,因此这对我没有任何负面影响。我建议您也这样做。否则,请注意您正在全局安装它,并且此插件将在使用此Python interpeter的所有项目中处于活动状态。)
另见:
- JetBrains PyCharm文档re:,它将告诉您如何使用py.test作为PyCharm中的测试运行程序
- 堆栈溢出线程: