首页 > 编程语言 >Python 新手必看:如何用 unittest 写出高质量代码?

Python 新手必看:如何用 unittest 写出高质量代码?

时间:2024-08-30 16:50:27浏览次数:9  
标签:必看 Python unittest add 测试用例 测试 self

文末赠免费精品编程资料~~

在 Python中 ,unittest 模块是进行单元测试的强大工具。无论你是初学者还是有经验的开发者,单元测试都是确保代码质量的重要一环。而 unittest 模块就是让这一过程变得简单、快捷的利器。

什么是单元测试?

在进入 unittest 模块之前,我们先来了解一下单元测试的概念。

单元测试(Unit Test)是指对软件中的最小可测试单元进行验证的测试。通常,这个最小单元是一个函数或方法。通过对这些单元进行测试,我们可以确保每个部分都能独立工作,这有助于在开发过程中发现并修复错误。

为什么要使用单元测试?

  1. 1. 早期发现错误:在代码开发的早期阶段进行单元测试,可以及早发现潜在的问题,减少调试的难度。

  2. 2. 确保代码正确性:通过测试来验证代码的行为,确保代码在各种输入下都能正确运行。

  3. 3. 重构的信心:在重构代码时,单元测试可以帮助确保改动没有引入新的错误。

unittest 模块概览

unittest 是 Python 内置的一个单元测试框架,类似于其他语言中的 JUnit(Java)或 NUnit(.NET)。它提供了一系列用于构建和运行测试的工具,帮助开发者自动化测试流程。

unittest 的基本概念

  • • 测试用例(Test Case):最小的测试单元,通常是一个方法,用于测试代码中的某个特定行为。

  • • 测试套件(Test Suite):一组测试用例的集合,可以用于组织多个测试用例。

  • • 测试运行器(Test Runner):执行测试的引擎,它可以是命令行工具,也可以是 GUI 工具,用于运行测试并输出结果。

快速上手:编写你的第一个测试

下面我们来编写一个简单的例子,了解如何使用 unittest 模块进行单元测试。

假设我们有一个简单的函数 add(a, b),用于返回两个数的和。

def add(a, b):
    return a + b

现在,我们为这个函数编写一个测试用例。

import unittest

class TestMathOperations(unittest.TestCase):

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

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

代码解析

  1. 1. 定义测试类:所有的测试类都需要继承自 unittest.TestCase

  2. 2. 编写测试方法:所有以 test_ 开头的方法都是测试用例。我们在 test_add 方法中编写了针对 add 函数的多个测试。

  3. 3. 断言方法self.assertEqual(a, b) 用于断言 a 和 b 是否相等,这是最常用的断言方法之一。

运行这段代码,unittest 将自动发现所有的测试用例并执行它们。结果如下:

图片

 

如果所有测试都通过,将会显示 "OK"。如果某个测试失败,unittest 会告诉你是哪个测试失败,并显示具体的错误信息。

更高级的测试技巧

1. 多种断言方法

除了 assertEqualunittest 还提供了许多其他的断言方法,例如:

  • • assertTrue(expr) 和 assertFalse(expr):断言表达式 expr 是否为 True 或 False

  • • assertIn(a, b):断言 a 是否包含在 b 中。

  • • assertRaises(exception, callable, *args, **kwds):断言在调用函数时是否抛出了指定的异常。

2. 测试套件

当你有多个测试类或测试用例时,可以使用测试套件来组织它们:

def suite():
    suite = unittest.TestSuite()
    suite.addTest(TestMathOperations('test_add'))
    # 你可以继续添加其他的测试用例或测试类
    return suite

if __name__ == '__main__':
    runner = unittest.TextTestRunner()
    runner.run(suite())

3. setUp 和 tearDown

有时,你可能需要在每个测试用例之前设置一些环境(例如初始化数据库连接),或者在测试用例之后清理环境。这时你可以使用 setUp 和 tearDown 方法。

class TestMathOperations(unittest.TestCase):

    def setUp(self):
        print("Setting up the environment...")

    def tearDown(self):
        print("Cleaning up the environment...")

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

setUp 会在每个测试用例之前调用,而 tearDown 则会在测试用例之后调用。

4.跳过测试

有时候,你可能不希望运行某些测试,这时可以使用 @unittest.skip 装饰器。

class TestMathFunctions(unittest.TestCase):
    
    @unittest.skip("跳过这个测试")
    def test_division(self):
        self.assertEqual(divide(10, 2), 5)

5.预期失败

如果你知道某个测试目前会失败,但不希望它阻止其他测试的运行,可以使用 @unittest.expectedFailure

@unittest.expectedFailure
def test_fail(self):
    self.assertEqual(1 / 0, 1)

掌握 unittest 不仅可以帮助你写出更加健壮的代码,还能提升你调试和维护代码的效率。希望通过这篇文章,你能对 unittest 模块有一个全面的了解,并能够在你的项目中灵活应用。

文末福利

如果你对Python感兴趣的话,可以试试我整理的这一份全套的Python学习资料,【点击这里】免费领取!

包括:Python激活码+安装包、Python
web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

① Python所有方向的学习路线图,清楚各个方向要学什么东西

② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析

③ 100多个Python实战案例,学习不再是只会理论

④ 华为出品独家Python漫画教程,手机也能学习

⑤ 历年互联网企业Python面试真题,复习时非常方便

标签:必看,Python,unittest,add,测试用例,测试,self
From: https://blog.csdn.net/2401_85903292/article/details/141721720

相关文章

  • 计算机毕设推荐-基于python的超市数据处理可视化分析
    ......
  • 全网最详细爬虫教学-刚学Python也行-方法详解-看我这篇就够了-第一节
        前言        很多人一听到爬虫脑子里就想到黑客,顶级程序员等。但其实爬虫不难,今天,我就来教大家快速入门爬虫。    requests库        说到爬虫,就不得不提request库了,它能提取静态网页源码(静态网页!!!),例如百度就是个静态网站,实战演练一下。......
  • 【Python机器学习】NLP词中的数学——主题建模
    目录齐普夫定律相关度排序工具其他工具OkapiBM25在文档向量中,词计数是有用的,但是纯词计数,即使按照文档长度进行归一化处理,也不能告诉我们太多该词在当前文档相对于语料库中其他文档的重要度信息。如果能弄清楚这些信息,我们就能开始描述语料库中的文档了。假设我们有一......
  • PMP考前必看!这些提分秘籍真的管用!
    PMP®考试的情景题目中有一些套路题目,即某些常见的经典情景,答案相对是固定的。我们总结了如下一些经典情景题目及其正确答案。遇到这些经典情景,只需在在选项中找正确答案就行了,不光提高答题速度,也能确保答题的准确率。一、项目进展遇到“巨大”困难1、遇到“巨大”障碍(技术、风险......
  • PMP考前必看!这些提分秘籍真的管用!
    PMP®考试的情景题目中有一些套路题目,即某些常见的经典情景,答案相对是固定的。我们总结了如下一些经典情景题目及其正确答案。遇到这些经典情景,只需在在选项中找正确答案就行了,不光提高答题速度,也能确保答题的准确率。一、项目进展遇到“巨大”困难1、遇到“巨大”障碍(技术、风险......
  • Python 通过 COM 调用 ChemDraw 实践
    COMComponentObjectModel(COM)是由Microsoft提供的一种二进制接口技术,用于软件组件间的交互。它支持在不同编程语言、编程环境、进程和计算机之间以语言中立的方式使用对象。使用Python通过COM接口调用ChemDraw绘制分子及获取文档中的对象Python提供了一些常用的......
  • 基于python+flask框架的某研发型企业知识管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在知识经济时代,企业核心竞争力越来越依赖于其知识资源的有效管理和利用。特别是对于研发型企业而言,知识是企业创新发展的源泉,是保持竞争优......
  • 基于python+flask框架的美食(风情)展示系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在全球化日益加深的今天,美食不仅是满足人们味蕾享受的重要方式,更成为了文化传播的重要载体。不同地区的美食承载着各自独特的历史、文化和......
  • 基于python+flask框架的教务管理系统设计与实现(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着教育信息化进程的加速,传统的手工教务管理方式已难以满足现代高等教育复杂多变的管理需求。教务管理作为学校日常运营的核心环节,涉及学......
  • 基于python+flask框架的完美上岸推免服务系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在高等教育日益普及的今天,研究生教育成为众多优秀本科生深造的首选途径。而推免(推荐免试)作为研究生招生的重要方式之一,其竞争日益激烈。学......