当前位置: 首页 > article >正文

Python-测试代码

测试是软件开发中不可或缺的环节,它能确保代码按预期运行,并在修改时快速发现潜在问题。本章将深入讲解如何为函数和类编写测试代码,涵盖单元测试、断言方法、异常处理等核心知识点,帮助开发者构建健壮可靠的程序。

一、测试函数  

1.1 单元测试和测试用例  

单元测试用于验证代码中最小可测试单元(如函数或方法)的行为是否符合预期。  

测试用例是一组测试的集合,通常对应一个文件或模块。Python 的 unittest 模块提供了编写测试用例的工具。  

示例:  

1.2 可通过的测试  

编写测试时,首先要确保代码在正常逻辑下能通过测试。例如,测试 add(2, 3) 是否返回 5。若测试通过,控制台会显示 OK,表明当前代码行为正确。

1.3 未通过的测试  

当代码存在问题时,测试会失败。例如,若将 add 函数错误地改为 return a * b,运行测试会提示 AssertionError,指出预期结果与实际不符。  

意义:失败的测试帮助开发者定位问题,是调试的重要依据。

1.4 测试未通过时怎么办  

1. 阅读错误信息:明确断言失败的原因。  

2. 检查代码逻辑:确认函数实现是否有误。  

3. 修复代码:修正问题后重新运行测试。  

4. 避免绕过问题:不要为了通过测试而修改断言条件,而是修复底层逻辑。

1.5 添加新测试  

为覆盖更多场景,需不断扩展测试用例。例如,测试负数相加、字符串拼接等:  

def test_add_negative_numbers(self):
    self.assertEqual(add(-1, -2), -3)

def test_add_strings(self):
    self.assertEqual(add("Hello", " World"), "Hello World")

二、测试类  

2.1 各种断言方法  

unittest 提供多种断言方法,适用于不同场景:  

- assertEqual(a, b):验证 a == b  

- assertTrue(x):验证 x 为真  

- assertIn(a, b):验证 a 在 b 中  

- assertRaises(ErrorType):验证是否抛出指定异常  

2.2 测试一个类  

假设有一个 User 类需要测试:  

class User:
    def __init__(self, name):
        self.name = name
        self.login_attempts = 0

    def increment_login_attempts(self):
        self.login_attempts += 1

# 测试类
class TestUser(unittest.TestCase):
    def test_increment_login_attempts(self):
        user = User("Alice")
        user.increment_login_attempts()
        self.assertEqual(user.login_attempts, 1)

2.3 测试 AnonymousSurvey 类  

以调查问卷类为例,测试其存储和统计功能:  

class AnonymousSurvey:
    def __init__(self, question):
        self.question = question
        self.responses = []

    def store_response(self, response):
        self.responses.append(response)

class TestAnonymousSurvey(unittest.TestCase):
    def test_store_single_response(self):
        survey = AnonymousSurvey("What language do you speak?")
        survey.store_response("English")
        self.assertIn("English", survey.responses)

2.4 方法 setUp()  

setUp() 方法用于在每个测试方法执行前初始化公共资源,避免重复代码。例如:  

class TestAnonymousSurvey(unittest.TestCase):
    def setUp(self):
        self.survey = AnonymousSurvey("What language do you speak?")
        self.responses = ["English", "Spanish", "Mandarin"]

    def test_store_responses(self):
        for response in self.responses:
            self.survey.store_response(response)
        self.assertEqual(len(self.survey.responses), 3)

- setUp() 会自动在每个测试方法(如 test_store_responses)前运行。

三、小结  

1. 测试函数:通过断言验证函数行为,覆盖正常和异常场景。  

2. 测试类:使用断言方法验证类的属性和方法,结合 setUp() 提高效率。  

3. 测试的价值:及早发现错误,提升代码可维护性,支持后续重构。  

结语  

掌握测试代码的编写是成为专业开发者的关键一步。通过本章的学习,你已能使用 unittest 框架为函数和类构建全面的测试用例。记住:好的测试不是负担,而是代码稳健运行的基石。


http://www.kler.cn/a/571289.html

相关文章:

  • 利用Adobe Acrobat 实现PPT中图片分辨率的提升
  • 4G工业路由器在公交充电桩中的应用与优势
  • Android U 分屏——SystemUI侧处理
  • 蓝桥杯---归并排序2(leetcode170)题解
  • 石基大商:OceanBase + Flink CDC,搭建连锁零售系统数据湖
  • CentOS7 安装Redis 6.2.6 详细教程
  • 队列的顺序结构—循环队列的判断条件(rear + 1) % MAXSIZE分析
  • flowable的使用
  • 使用Windbg分析dump文件定位软件异常的方法与操作步骤
  • 【Python 数据结构 5.栈】
  • day51 shell
  • 交叉编译 ARM 架构浏览器(补充)
  • 某金融租赁公司数据治理实践
  • R JSON 文件
  • Geotools中获取Shapefile的属性表格字符集编码的一种方法
  • VS2015 c++和cmake配置编程
  • 蓝桥杯复盘记录004(2023)
  • 19.8、C++11新特性有哪些⑧【基于范围的for循环】
  • 深入探索像ChatGPT这样的大语言模型-03-POST-Training:Reinforcement Learning
  • Lua脚本使用教学指南:与Spring Boot项目集成示例