首页 > 编程问答 >有没有办法用 PyCharm 捕获单元测试异常?

有没有办法用 PyCharm 捕获单元测试异常?

时间:2024-07-27 04:46:35浏览次数:16  
标签:python unit-testing debugging exception pycharm

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 中捕获单元测试异常的最佳方法。

以下是其工作原理:

  1. 创建测试套件: 首先,需要创建一个 unittest.TestSuite 对象,并使用 unittest.defaultTestLoader.loadTestsFromTestCase() 方法加载要调试的测试用例。

  2. 调用 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 中捕获和调试单元测试异常的宝贵工具。它提供了调试器集成、粒度控制以及易用性的强大组合。

标签:python,unit-testing,debugging,exception,pycharm
From: 14081343

相关文章

  • 使用类型提示将 Python 转换为 Cython
    类型提示现在在Python3.5版本中可用。在规范(PEP484)中,目标(和非目标)被明确暴露:#RationaleandGoals此PEP旨在为类型注释提供标准语法,开放Python代码更容易静态分析和重构、潜在的运行时类型检查以及(也许在某些情况下)利用类型信息生成代码。......
  • 在 Python 类型提示中区分 PySpark 和 Pandas DataFrame (PyCharm)
    在PyCharm中,如果使用apyspark.sql.DataFrame代替pandas.DataFrame,类型提示似乎不会触发警告,反之亦然。例如以下代码根本不会生成任何警告:frompyspark.sqlimportDataFrameasSparkDataFramefrompandasimportDataFrameasPandasDataFramedef......
  • 如何在Python中继承类型提示?
    所以我的问题是,当我有一个A类型的类来做事情并且我使用这些函数作为subclass(B)时,它们仍然是类A的类型,并且不接受我的类B对象作为参数或作为函数签名。我的问题简化了:fromtypingimportTypeVar,Generic,CallableT=TypeVar('T'......
  • Python - 如何传递类对象的函数参数类型(打字)
    我想python3.7附带了(不确定),不仅可以将变量名传递给函数,还可以传递变量的类型。我想知道的是是否有可能传递特定类的类型。以同样的方式传递:deffoo_func(i:int)->None:pass如果我有一个类,让我们说:classfoo_class(object):pass我如何转换fo......
  • ubuntu系统中安装PyQt5,并在Pycharm中配置
    本文详细讲述了在Ubuntu22.04中安装PyQt5的过程,并在Pycharm中导入了两个PyQt5的模块。第一步:打开终端,输入以下指令下载pyqt5:sudoaptinstallpyqt5* 输入“y”继续…第二步:输入以下指令,安装pyqt5相应的工具:并输入“y”继续:sudoaptinstallqttools5-dev-tool......
  • 使用 Python 构建简单 REST API
    使用Python构建简单RESTAPI1.概述本技术文档旨在指导开发者使用Python框架Flask构建一个基本的RESTAPI。通过学习本指南,您将掌握创建、读取、更新和删除(CRUD)操作的基本知识,并能够使用Python构建自己的API。2.安装依赖首先,您需要确保已安装Python和Flask......
  • Python——Pandas(第二讲)
    文章目录变量类型的转换Pandas支持的数据类型在不同数据类型间转换建立索引新建数据框时建立索引读入数据时建立索引指定某列为索引列将索引还原变量列引用和修改索引引用索引修改索引修改索引名修改索引值更新索引Series的索引和切片DataFrame的索引和切片选择列按......
  • 基于Python+Django的红色文化研学网站设计与实现
    ......
  • 【python】对网站进行请求-初识
    python实现对网站进行请求代码如下importrequestsdefget_data(url,headers=None,params=None,timeout=10):try:res=requests.get(url,headers=headers,params=params,timeout=timeout)res.raise_for_status()returnres.text......
  • 【python】Django初识-从未有如此美妙的开局
    Django初识python、Django安装与验证python安装Python官网https://www.python.org/Django安装pipinstallDjango验证python是否安装成功python--version验证Django是否安装成功python3-mdjango--version创建第一个Django项目项目创建与服务器启动打开cmd,输......