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 unittest

from TDD_demo import add

class TestTDD(unittest.TestCase):

def test_float_add(self):

assert add(0.3, 0.5) == 0.8

def test_int_add(self):

assert add(1, 2) == 3

def test_other_add(self):

assert add("a", "b") == BaseException

if __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 + b

else:

return BaseException

if __name__ == '__main__':

r1 = add(0.1, 0.3)

r2 = add("a", "b")

print(r1)

print(r2)

再次运行测试:

复制代码
python test_TDD.py

测试通过:

注意事项:

1、测试用例应尽量覆盖所有可能的情况,包括正常情况、边界情况和异常情况。

2、测试用例应简洁明了,避免过于复杂的逻辑。

3、保持测试与实现代码分离,避免测试代码依赖于实现细节。

4、在实现新功能或修改现有功能时,始终遵循红-绿-重构循环。

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

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

相关推荐
Python图像识别几秒前
39-【2027毕设】YOLO11行人摔倒检测系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·qt·课程设计
java_nnnn8 分钟前
LeetCode刷题双指针(有效三角形的个数+三数之和)Java
算法·leetcode·职场和发展
计算机毕业编程指导师9 分钟前
【计算机毕设】基于Hadoop的人口统计特征与肥胖风险关联分析的数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·课程设计·肥胖风险
量化吞吐机9 分钟前
涨跌停价与最小变动价位,为什么要分开看?
python
FYKJ_201010 分钟前
django个性化新闻推荐35173-计算机课程设计、毕业设计
java·spring boot·后端·python·架构·django·课程设计
kimnoic11 分钟前
Python数据库sqlite3图文实例详解
开发语言·python
计算机毕业编程指导师16 分钟前
【计算机毕业设计选题】基于Hadoop+Spark的乳腺癌数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
hadoop·python·spark·毕业设计·课程设计·乳腺癌·计算机毕设
金銀銅鐵1 小时前
[Java] 用GUI展示class文件顶层的 access_flags
后端·python·ai编程
不要打扰7561 小时前
《房地产经纪操作实务》重点和难点是什么?用哪个题库好
经验分享·职场和发展