python 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()
你完全正确! 使用
unittest.TestSuite.debug()
方法是在 PyCharm 中捕获单元测试异常的最佳方法。
以下是其工作原理:
-
创建测试套件: 首先,需要创建一个
unittest.TestSuite
对象,并使用unittest.defaultTestLoader.loadTestsFromTestCase()
方法加载要调试的测试用例。 -
调用
debug()
:TestSuite
对象的debug()
方法以调试模式运行测试。这允许在调试器中逐步执行代码并捕获发生的任何异常。
以下是使用此方法的优点:
- 调试器集成: PyCharm 的调试器将捕获异常,允许检查变量、查看调用堆栈并逐步执行代码以找出问题的根源。
- 粒度控制: 可以调试单个测试用例,而无需运行整个测试套件。
-
易于使用:
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()
在此示例中,
debugTestCase()
类方法处理测试套件的创建和
debug()
方法的调用。这使得可以轻松地调试任何继承
DebuggableTestCase
的测试用例。
总的来说,
unittest.TestSuite.debug()
方法是用于在 PyCharm 中捕获和调试单元测试异常的宝贵工具。它提供了调试器集成、粒度控制以及易用性的强大组合。