使用ChatGPT给Python代码写单元测试

先写一个简单的python函数,找chatgpt写单元测试:

有一个python函数,请帮忙写单元测试,函数长这样:

def test2(a: list, b: list) -> float:"""计算两个坐标的距离:param a list 格式如:[x1, y1]:param b list 格式如:[x2, y2]:return float"""s = math.pow(a[0]-b[0], 2) + math.pow(a[1]-b[1], 2)return math.sqrt(s)

过了一会得到回复:

可以编写以下测试用例:```python
import mathdef test_test2():# 测试两个坐标点在平面内的情况assert math.isclose(test2([0, 0], [3, 4]), 5.0)assert math.isclose(test2([5, 5], [1, 1]), 5.656854249492381)assert math.isclose(test2([1, 5], [1, 1]), 4.0)# 测试两个坐标点在同一位置的情况assert math.isclose(test2([1, 1], [1, 1]), 0.0)assert math.isclose(test2([0, 0], [0, 0]), 0.0)# 测试两个坐标点在不同平面的情况assert math.isclose(test2([0, 0], [-3, -4]), 5.0)assert math.isclose(test2([5, 10], [1, 1]), 9.848857801796104)assert math.isclose(test2([1, 5], [8, 1]), 7.810249675906654)
```这些测试用例包括了测试两个坐标点在平面内、在同一位置、
在不同平面的情况,可以覆盖到该函数的所有可能情况。

这个结果已经超出我预期了,一个普通的单元测试感觉已经成型了,而且它还理解了“坐标”和“平面”。不过有小问题,注释是不对的,两个点不可能不再同一个平面上。执行这个测试函数,最后一个assert是通不过的。

使用ChatGPT给Python代码写单元测试

尝试让它进行修正:

上面最后一个assert测试不通过

它的回复:

感谢您指出这个问题。我重新检查了代码并发现我的错误。
这是由于我在误将x轴和y轴的坐标值进行了计算,导致最终
结果不正确。以下是已修复的测试用例:```python
import mathdef test_test2():# 测试两个坐标点在平面内的情况assert math.isclose(test2([0, 0], [3, 4]), 5.0)assert math.isclose(test2([5, 5], [1, 1]), 5.656854249492381)assert math.isclose(test2([1, 5], [1, 1]), 4.0)# 测试两个坐标点在同一位置的情况assert math.isclose(test2([1, 1], [1, 1]), 0.0)assert math.isclose(test2([0, 0], [0, 0]), 0.0)# 测试两个坐标点在不同平面的情况assert math.isclose(test2([0, 0], [-3, -4]), 5.0)assert math.isclose(test2([5, 10], [1, 1]), 9.219544457292887)assert math.isclose(test2([1, 5], [8, 1]), 7.810249675906654)
```现在,所有测试用例都应该能够通过。

虽然它说修正了,但是实际上是越改越错。

--------------------------------
再放一个实际的函数试试:

有一个python函数,请帮忙写单元测试,函数长这样:
def distance_hy(line1, line2):"""聚类算法的距离函数,依据行高及纵坐标计算两个文本行的距离距离越小越有可能是在同一行上"""if line1[0] == line2[0]:return 0.0h1, y1 = line1[1:]h2, y2 = line2[1:]diffy = abs(y1 - y2)hmin, hmax = min(h1, h2), max(h1, h2)if hmax > hmin * 2 or diffy > hmin / 2:return 1000.0return (hmax - hmin) / hmin + diffy / hmin

回复:

好的,下面是一个基本的测试用例:```python
def test_distance_hy():line1 = (1, 10, 20)line2 = (2, 10, 25)assert distance_hy(line1, line2) == 0.25line1 = (1, 10, 20)line2 = (2, 11, 25)assert distance_hy(line1, line2) == 1000.0line1 = (1, 10, 20)line2 = (2, 5, 22)assert distance_hy(line1, line2) == 1.0line1 = (1, 10, 20)line2 = (2, 30, 22)assert distance_hy(line1, line2) == 1000.0
```这个测试用例覆盖了 distance_hy() 函数的各个分支,
包括相同行号的情况、行高和纵坐标的差异是否满足距离
计算的条件以及行高和纵坐标的比较(除数不能为0)等。

这个测试是通不过的,不过基本代码有了,也能考虑边界值,让它再提升提升:

这个覆盖率还不够,请提高一下覆盖率

得到的结果:

好的,下面是增加覆盖率后的测试用例:```python
def test_distance_hy():# 相同行号line1 = (1, 10, 20)line2 = (1, 11, 25)assert distance_hy(line1, line2) == 0.0# 行高和纵坐标满足距离计算条件line1 = (1, 10, 20)line2 = (2, 11, 25)assert distance_hy(line1, line2) == 1000.0# 行高和纵坐标不满足距离计算条件line1 = (1, 10, 20)line2 = (2, 5, 22)assert distance_hy(line1, line2) == 1.0# 行高和纵坐标相差太大,不满足距离计算条件line1 = (1, 10, 20)line2 = (2, 30, 22)assert distance_hy(line1, line2) == 1000.0# 行高和纵坐标相同,距离为0line1 = (1, 10, 20)line2 = (2, 10, 20)assert distance_hy(line1, line2) == 0.0# 行高相同,纵坐标差距过大,不满足距离计算条件line1 = (1, 10, 20)line2 = (2, 100, 22)assert distance_hy(line1, line2) == 1000.0# 行高不同,纵坐标相同,距离为行高比line1 = (1, 10, 20)line2 = (2, 20, 20)assert distance_hy(line1, line2) == 1.0# 行高不同,纵坐标差距不大,距离为行高比加上纵坐标差比line1 = (1, 10, 20)line2 = (2, 12, 22)assert distance_hy(line1, line2) == 1.2# 行高比为0的情况,距离为0line1 = (0, 10, 20)line2 = (0, 10, 25)assert distance_hy(line1, line2) == 0.0# 行高比为无穷大的情况,距离为1000line1 = (1, 10, 20)line2 = (1000, 10, 25)assert distance_hy(line1, line2) == 1000.0
```这个测试用例对函数的各种情况都进行了覆盖,包括行高
和纵坐标相同,行高和纵坐标不同,行高比为0或无穷大等情况。

我没说,参数的第一个值是行号,它居然能“理解”了。

结论

写代码的能力有点超出预期,感觉程序猿们真的要好好考虑怎么和AI进行协同工作了:

AI可以快速地写出大量的代码,人再对其进行微调,以后程序员最重要的能力可能是:能把复杂事务进行模块化的能力。

在快速进化的AI面前,人要找到自己的定位,不要以为AI没有思想,它自己都理解不了自己说的话,就觉得我们人类有优越感。实际上,AI有没有思想不重要,能不能理解文本也不重要,重要的是它能为我们干活,能大大提升我们的工作效率。

回到三体的那句名言:弱小和无知不是生存的障碍,傲慢才是!

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

自动化测试视频教程、学习笔记领取传送门!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/108076.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iview时间控件 动态不可选日期 可选择24小时范围内 时间往后退24小时

演示 html 设定 起始时间 触发on-change 方法结束时间 options 动态设置不可选择的日期。 <!-- 起始时间 --> <FormItem :label"$t(startTime)" prop"startTime"><DatePickertransfertype"datetime":placeholder"$t(pleas…

Mac操作系统上设置和配置PPPoE连接

嗨&#xff0c;在使用Mac的小伙伴么&#xff01;你是否在Mac操作系统上尝试设置和配置PPPoE连接&#xff0c;却不知道怎么设置&#xff1f;别担心&#xff0c;今天我将为你一步步教你如何在Mac上进行设置和配置。无论你是新手还是有经验的用户&#xff0c;本文都将帮助你轻松完…

回归预测 | MATLAB实现GA-APSO-IBP改进遗传-粒子群算法优化双层BP神经网络多输入单输出回归预测

回归预测 | MATLAB实现GA-APSO-IBP改进遗传-粒子群算法优化双层BP神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现GA-APSO-IBP改进遗传-粒子群算法优化双层BP神经网络多输入单输出回归预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现GA-…

(2023)Linux安装pytorch并使用pycharm远程编译运行

&#xff08;2023&#xff09;Linux安装pytorch并使用pycharm远程编译运行 安装miniconda 这部分参考我这篇博客的前半部分Linux服务器上通过miniconda安装R&#xff08;2022&#xff09;_miniconda 安装r_Dream of Grass的博客-CSDN博客 创建环境 创建一个叫pytorch的环境…

kafka复习:(11)auto.offset.reset的默认值

在ConsumerConfig这个类中定义了这个属性的默认值&#xff0c;如下图 也就是默认值为latest,它的含义是&#xff1a;如果没有客户端提交过offset的话&#xff0c;当新的客户端消费时&#xff0c;把最新的offset设置为当前消费的offset. 默认是自动提交位移的&#xff0c;每5秒…

Android View动画整理

View 动画相关内容可参考官网 动画资源 此前也有写 View 动画相关的内容&#xff0c;但都只是记录代码&#xff0c;没有特别分析。以此篇作为汇总、整理、分析。 Android View 动画有4中&#xff0c;分别是 平移动画 TranslateAnimation缩放动画 ScaleAnimation旋转动画 Rot…

JZ36 二叉搜索树与双向链表

题目来源&#xff1a;牛客网 题目描述&#xff1a; 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表。如下图所示 注意: 1.要求不能创建任何新的结点&#xff0c;只能调整树中结点指针的指向。当转化完成以后&#xff0c;树中节点的左指针需要指向前驱…

【LLM】解析pdf文档生成摘要

文章目录 一、整体思路二、代码三、小结Reference 一、整体思路 非常简单的一个v1版本 利用langchain和pdfminer切分pdf文档为k块&#xff0c;设置overlap等参数先利用prompt1对每个chunk文本块进行摘要生成&#xff0c;然后利用prompt2对多个摘要进行连贯组合/增删模型可以使…

【算法训练-链表】合并两个有序链表、合并K个有序链表

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;首先&#xff0c;链表对应的数据结构在这篇Blog中&#xff1a;【基本数据结构 一】线性数据结构&#xff1a;链表&#xff0c;基于对基础知识的理解来进行题目解答。…

Vue2向Vue3过度Vuex状态管理工具快速入门

目录 1 Vuex概述1.是什么2.使用场景3.优势4.注意&#xff1a; 2 需求: 多组件共享数据1.创建项目2.创建三个组件, 目录如下3.源代码如下 3 vuex 的使用 - 创建仓库1.安装 vuex2.新建 store/index.js 专门存放 vuex3.创建仓库 store/index.js4 在 main.js 中导入挂载到 Vue 实例…

0821|C++day1 初步认识C++

一、思维导图 二、知识点回顾 【1】QT软件的使用 1&#xff09;创建文件 创建文件时&#xff0c;文件的路径一定是全英文 2&#xff09;修改编码 工具--->选项--->行为--->默认编码&#xff1a;system 【2】C和C的区别 C又叫C plus plus&#xff0c;C是对C的扩充&…

交通科技与管理杂志社交通科技与管理编辑部2023年第9期目录

专家论坛 黑龙江省经济高质量发展与生态环境保护耦合协调发展研究 刘降斌;祃玉帅; 1-5142 我国省际数字经济高质量发展水平综合评价研究 耿娟;毕晨曦; 6-8 振兴龙江《交通科技与管理》投稿邮箱&#xff1a;cn7kantougao163.com(注明投稿“《交通科技与管理》”) 数…

基于单片机的智能数字电子秤proteus仿真设计

一、系统方案 1、当电子称开机时&#xff0c;单片机会进入一系列初始化&#xff0c;进入1602显示模式设定&#xff0c;如开关显示、光标有无设置、光标闪烁设置&#xff0c;定时器初始化&#xff0c;进入定时器模式&#xff0c;如初始值赋值。之后液晶会显示Welcome To Use Ele…

性能优化维度

CPU 首先检查 cpu&#xff0c;cpu 使用率要提升而不是降低。其次CPU 空闲并不一定是没事做&#xff0c;也有可能是锁或者外部资源瓶颈。常用top、vmstat命令查看信息。 vmstat 命令: top: 命令 IO iostat 命令&#xff1a; Memory free 命令&#xff1a; 温馨提示&#xff1a…

【悬挂绝缘子的串效模型】测量每个绝缘子盘之间的电压并测量串效研究(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

无可用的防病毒提供方你的设备

今天安装软件时关闭了一下windows的Defender&#xff0c;然后安装后出现下面问题 莫名奇妙我的病毒防护就不能用了 后来请教了老师才知道是安装的软件把我系统设置改了&#xff0c;以后使用一键安装软件要谨慎 解决措施&#xff1a; CMD命令&#xff0c;输入“regedit”&#…

SpringCloud Alibaba实战和源码(7)Skywalking

什么是SkyWalking Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的产品&#xff0c;它同时吸收了Zipkin /Pinpoint /CAT 的设计思路。特点是&#xff1a;支持多种插件&#xff0c;UI功能较强&#xff0c;支持非侵入式埋点。目前使用厂商最多&#xff0c;版本更新较…

UE4/5Niagara粒子特效之Niagara_Particles官方案例:2.4->3.2

之前的案例 UE4/5Niagara粒子特效之Niagara_Particles官方案例&#xff1a;1.1-&#xff1e;1.4_多方通行8的博客-CSDN博客 UE4/5Niagara粒子特效之Niagara_Particles官方案例&#xff1a;1.5-&#xff1e;2.3_多方通行8的博客-CSDN博客 2.4 Location Events 这次的项目和之…

升级Go 版本到 1.19及以上,Goland: file.Close() 报错: Unresolved reference ‘Close‘

错误截图 解决方法 File -> Settings -> Go -> Build Tags & Vendoring -> Custom tags -> 添加值 “unix” 原因 Go 1.19 引入了unix构建标签。因此&#xff0c;需要添加unix到自定义标签。 参考 https://blog.csdn.net/weixin_43940592/article/det…

学习JAVA打卡第四十四天

Scanner类 ⑴Scanner对象 scanner对象可以解析字符序列中的单词。 例如&#xff1a;对于string对象NBA 为了解析出NBA的字符序列中的单词&#xff0c;可以如下构造一个scanner对象。 将正则表达式作为分隔标记&#xff0c;即让scanner对象在解析操作时把与正则表达式匹配的字…