Python基础入门 Day101 单元测试入门

66次阅读
没有评论

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

在软件开发过程中,测试是保证代码质量的重要环节。单元测试(Unit Test)是一种常见的测试方式,用于验证程序中最小功能单元是否正确工作。Python 提供了内置的 unittest 模块,方便开发者编写和运行单元测试。

  1. 什么是单元测试
    单元测试是指对程序中的最小功能单元(通常是函数或方法)进行测试,确保其逻辑和结果正确。例如,我们写了一个计算函数,就需要单元测试来验证它在各种输入下是否能得到预期输出。

  2. 使用 unittest 编写第一个测试
    unittest 是 Python 的标准库,使用起来非常方便。

import unittest

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

# 编写测试用例
class TestMathFunctions(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)
        self.assertEqual(add(-1, 1), 0)
        self.assertNotEqual(add(2, 2), 5)

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

运行此脚本,unittest 会自动执行测试类中的方法,并报告结果。

  • assertEqual(a, b):断言 a == b。
  • assertNotEqual(a, b):断言 a != b。
  • assertTrue(x):断言 x 为 True。
  • assertFalse(x):断言 x 为 False。
  • assertRaises:断言抛出异常。
  1. 测试多个函数
    我们可以在一个测试类中编写多个测试方法,每个方法测试不同的函数。
def multiply(a, b):
    return a * b

class TestMathFunctions(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(1, 2), 3)

    def test_multiply(self):
        self.assertEqual(multiply(3, 4), 12)
        self.assertNotEqual(multiply(2, 5), 11)

测试时,unittest 会自动运行所有以 test_ 开头的方法。

  1. 测试异常情况
    单元测试不仅需要测试正常输入,还需要测试异常输入。
def divide(a, b):
    return a / b

class TestMathFunctions(unittest.TestCase):
    def test_divide(self):
        self.assertEqual(divide(10, 2), 5)
        # 测试除零异常
        with self.assertRaises(ZeroDivisionError):
            divide(5, 0)

assertRaises 用于验证函数是否抛出指定的异常。

  1. 测试的组织与运行
    通常,我们会将测试代码单独存放在 tests/ 目录下,命名为 test_xxx.py。运行时,可以使用命令:
python -m unittest discover

该命令会自动搜索 tests/ 目录下所有以 test_ 开头的文件,并执行其中的测试。

  1. 使用 setUp 和 tearDown
    有时,每个测试前后需要执行一些初始化和清理操作。我们可以使用 setUp()tearDown() 方法。
class TestExample(unittest.TestCase):
    def setUp(self):
        print(" 测试开始前准备 ")

    def tearDown(self):
        print(" 测试结束后清理 ")

    def test_case1(self):
        self.assertEqual(1 + 1, 2)

在每个测试用例运行前后,setUptearDown 会分别执行。

总结:
单元测试是软件开发的重要组成部分,它能够帮助我们提前发现问题,确保代码逻辑正确。通过 unittest 模块,我们可以轻松地编写测试用例、验证函数结果,并测试异常情况。良好的测试习惯不仅能提高代码质量,也能减少后期维护的成本。

练习与思考:

  1. 为一个字符串处理函数(如去除空格、转大写等)编写单元测试。
  2. 使用 setUptearDown 来模拟数据库连接和关闭的过程。
  3. 尝试用 unittest 为你之前写的某个小项目编写测试用例。
正文完
 0
评论(没有评论)