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

TDD测试驱动开发+Python案例解析

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快

简介:TDD(Test-Driven Development,测试驱动开发)是一种软件开发方法,它的核心思想是在编写实现功能的代码之前先编写测试用例。TDD的开发过程遵循以下基本原则:先编写测试用例,然后编写代码让测试通过,最后对代码进行重构以提高代码质量。这一过程被称为红-绿-重构循环(Red-Green-Refactor)。通过遵循TDD的原则和方法,可以提高软件开发的质量、效率和可维护性。

基本过程:

1、快速新增一个测试
2、运行所有的测试(有时候只需要运行一个或一部分),发现新增的测试不能通过
3、做一些小小的改动,尽快地让测试程序可运行,为此可以在程序中使用一些不合情理的方法
4、运行所有的测试,并且全部通过
5、重构代码,以消除重复设计,优化设计结构

TDD的精髓:

1、通过编写测试用例,更清晰地描述需求和目标,使开发人员更关注功能实现。
2、保证代码质量,当代码修改时,可以通过运行测试用例确保现有功能不会受到影响。
3、提高代码的可维护性,因为测试用例可以作为文档来描述代码的行为。

TDD的主要作用:

1、提高代码质量:通过测试,可以确保代码符合预期行为。
2、降低风险:测试用例可以帮助捕捉潜在问题,避免在以后的开发过程中出现难以发现的错误。
3、提高开发效率:通过先设计测试用例,可以减少需求分析和设计阶段的时间,有助于更快地完成项目。

安装和使用TDD的方法因编程语言和测试框架的不同而异。

示例:基于Python语言和unittest测试框架

编写测试用例:创建一个名为test_TDD.py的文件,编写一个简单的测试用例。

# -*- coding: utf-8 -*-# time: 2023/5/5 21:48# file: test_TDD.py# 公众号: 互联网杂货铺import unittestfrom TDD_demo import addclass TestTDD(unittest.TestCase):def test_float_add(self):assert add(0.3, 0.5) == 0.8def test_int_add(self):assert add(1, 2) == 3def test_other_add(self):assert add("a", "b") == BaseExceptionif __name__ == '__main__':unittest.main()

编写实现代码:在同一目录下创建一个名为TDD_demo.py的文件,编写相应的实现代码。首次编写该功能。

# -*- coding: utf-8 -*-# time: 2023/5/5 23:50# file: TDD_demo.py# 公众号:互联网杂货铺def add(num1, num2):return num1 + num2

运行测试:

python test_TDD.py

未通过测试:

运行完成之后:针对TDD_demo.py发现其中有个用例是不符合我们实际的运行场景的,此时需要重构。

重构后:TDD_demo.py

# -*- coding: utf-8 -*-# time: 2023/5/5 23:50# file: TDD_demo.py# 公众号: 互联网杂货铺def add(a, b):numeral_type = (int, float)if isinstance(a, numeral_type) and isinstance(b, numeral_type):return a + belse:return BaseExceptionif __name__ == '__main__':r1 = add(0.1, 0.3)r2 = add("a", "b")print(r1)print(r2)

再次运行测试:

python test_TDD.py

测试通过:

注意事项:

1、测试用例应尽量覆盖所有可能的情况,包括正常情况、边界情况和异常情况。
2、测试用例应简洁明了,避免过于复杂的逻辑。
3、保持测试与实现代码分离,避免测试代码依赖于实现细节。
4、在实现新功能或修改现有功能时,始终遵循红-绿-重构循环。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。


文章转载自:

http://yG7Z7m5q.phhqL.cn
http://lXC6jRT7.phhqL.cn
http://frxIHV7N.phhqL.cn
http://T2JHLj9h.phhqL.cn
http://po3KI28Q.phhqL.cn
http://XyMRE6Q5.phhqL.cn
http://aOxAmM3b.phhqL.cn
http://sC08MOyt.phhqL.cn
http://ZTL4DQyK.phhqL.cn
http://1aZy2cZM.phhqL.cn
http://eA7VMd2b.phhqL.cn
http://qHBFbjx6.phhqL.cn
http://zUqO66IX.phhqL.cn
http://iG8n9zk5.phhqL.cn
http://PIlf5Qit.phhqL.cn
http://mqaiKx4A.phhqL.cn
http://Lf8QV02S.phhqL.cn
http://delTcO4b.phhqL.cn
http://P3SdmQlv.phhqL.cn
http://0ZcATDM6.phhqL.cn
http://9lGYxc8M.phhqL.cn
http://2ITyKOtM.phhqL.cn
http://EE6gbUzX.phhqL.cn
http://NV07YOvv.phhqL.cn
http://JaOJBwPi.phhqL.cn
http://nP33Asq0.phhqL.cn
http://TFTGnjla.phhqL.cn
http://P1yU8DBa.phhqL.cn
http://HyjB6hLE.phhqL.cn
http://fCQwiekP.phhqL.cn
http://www.dtcms.com/a/365354.html

相关文章:

  • SkyWalking 支持的告警通知方式(Alarm Hooks)类型
  • 吱吱企业通讯软件以安全为核心,构建高效沟通与协作一体化平台
  • 驱动开发系列69 - GLSL编译器实现 - 符号表的定义
  • 【SQL Server 2022】保姆级SQL Server 详细图文下载安装教程
  • Unity学习----【进阶】Addressables(一)--概述与简单的使用
  • 涉私数据安全与可控匿名化利用机制研究(上)
  • 代码随想录算法训练营第四十三天|LeetCode300. 最长递增子序列,LeetCode674. 最长连续递增序列,LeetCode718. 最长重复子数组
  • 【C语言数组操作:从指针到下标访问】
  • 【微信小程序预览文件】(PDF、DOC、DOCX、XLS、XLSX、PPT、PPTX)
  • 1分钟生成爆款相声对话视频!Coze智能体工作流详细搭建教程,小白也能轻松上手
  • daily notes[9]
  • 【音视频】FMP4 介绍
  • 从 MMLU 到 HumanEval:为什么评估大型语言模型(LLM)的基准至关重要?
  • 策略模式 + 工厂模式
  • 海伯森检测应用案例之--光学板轮廓及瑕疵检测
  • 嵌入式 Linux 启动流程详解 (以 ARM + U-Boot 为例)
  • [Ai Agent] 打造一个真正可落地的客服智能体
  • 论文理解:Reflexion: Language Agents with Verbal Reinforcement Learning
  • 封装一个redis获取并解析数据的工具类
  • 基于web的云智教育在线平台设计与实现
  • 利用 openssl api 实现 TLS 双向认证
  • Jenkins和Fastlane的原理、优缺点、用法、如何选择
  • SpringAI Alibaba Graph 流式对话
  • python sqlalchemy模型的建立
  • 嵌入式硬件学习-2
  • Algorithms library
  • Qoder如何免费续杯,立即参与实践分享,赢 1000Credits
  • 解决windows下火狐浏览器开机会同时启动两个或多个页面
  • 为何quest3设备会强制更新,如何屏蔽更新
  • GoogleNet:更深的网络与更高的效率