Python基础入门 Day91 单元测试与代码质量保证

66次阅读
没有评论

共计 1741 个字符,预计需要花费 5 分钟才能阅读完成。

在软件开发中,测试是保证程序正确性和稳定性的重要环节。通过编写测试代码,我们能够在程序修改后快速验证功能是否正常,避免出现意料之外的错误。Python 内置了 unittest 模块,用于进行单元测试。

  1. 什么是单元测试
    单元测试是对程序中最小功能单元(如函数或方法)进行的测试。它的目标是验证单个模块在给定输入下是否能产生预期的输出。
    优势:
  • 提前发现问题
  • 保证代码修改不破坏已有功能
  • 提高代码可维护性
  1. 编写第一个单元测试
    使用 unittest 模块可以轻松创建测试。
import unittest

# 被测试的函数
def add(a, b):
    return a + b

# 单元测试类
class TestMathFunctions(unittest.TestCase):

    def test_add(self):
        self.assertEqual(add(2, 3), 5)   # 测试 2+3 是否等于 5
        self.assertEqual(add(-1, 1), 0)  # 测试 -1+1 是否等于 0
        self.assertNotEqual(add(2, 2), 5) # 测试 2+2 是否不等于 5

if __name__ == '__main__':
    unittest.main()

运行后,unittest 会自动执行 test_ 开头的方法并报告结果。

  1. 常用断言方法
  • assertEqual(a, b):判断 a == b
  • assertNotEqual(a, b):判断 a != b
  • assertTrue(x):判断 x 为真
  • assertFalse(x):判断 x 为假
  • assertIn(a, b):判断 ab
  • assertRaises(Exception, func, *args):判断是否抛出异常

示例:

class TestExample(unittest.TestCase):
    def test_conditions(self):
        self.assertTrue(5 > 3)
        self.assertFalse(3 > 5)
        self.assertIn(2, [1, 2, 3])
        self.assertRaises(ZeroDivisionError, lambda: 1/0)
  1. 测试类的 setup 和 teardown
    有些测试需要在运行前准备环境或运行后清理环境,可以使用 setUp()tearDown() 方法:
class TestWithSetup(unittest.TestCase):
    def setUp(self):
        print(" 测试前准备 ")
        self.data = [1, 2, 3]

    def tearDown(self):
        print(" 测试后清理 ")
        self.data.clear()

    def test_sum(self):
        self.assertEqual(sum(self.data), 6)
  1. 组织和运行测试
    可以将多个测试类放在一个文件中,或者拆分为多个文件,使用命令行运行:
python -m unittest test_module.py
python -m unittest discover -s tests

其中 discover 命令会自动搜索并运行 tests 文件夹中的所有测试文件。

  1. 测试驱动开发(TDD)
    TDD 的流程是:
  • 先编写测试用例(测试需求)
  • 再编写实现代码
  • 运行测试,直到通过
  • 重构代码并保证测试仍然通过

例如,先写测试:

class TestCalc(unittest.TestCase):
    def test_multiply(self):
        self.assertEqual(multiply(2, 3), 6)

再编写 multiply 函数,直到测试通过。

  1. 提高代码质量的工具
    除了 unittest,还可以使用:
  • pytest:更简洁、功能更强大的测试框架
  • coverage:检查测试覆盖率
  • flake8pylint:代码规范检查工具

总结:
单元测试是保障代码质量的基石。通过编写测试,我们可以确保每个函数和模块的正确性,并在代码修改后快速发现问题。Python 提供的 unittest 模块能满足基本测试需求,而结合 pytestcoverage 等工具,可以实现更全面的代码质量管理。

练习与思考:

  1. 为一个字符串处理函数编写单元测试,测试它能否正确处理空字符串、特殊字符和正常文本。
  2. 使用 unittest 编写一个测试类,测试文件读写操作是否正常。
  3. 尝试安装并使用 pytest,对已有的测试代码进行运行比较。
正文完
 0
评论(没有评论)