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

第5章:Python TDD定义Dollar对象相等性

写在前面


这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许优质的单元测试是一个切入点。 就我个人而言,这本书确实很有帮助。第一次读的时候,很多细节我都不太懂,但将书中内容应用到工作中后,我受益匪浅。比如面对一些让人抓狂的代码设计时,书里的方法能让我逐步深入理解代码的逻辑与设计。 作为一名测试开发工程师,我想把学习这本书的经验分享给大家,希望能给大家带来帮助。因为现在工作中大多使用 Python 代码,所以我把书中JAVA案例都用 Python 代码进行了改写 。

问题背景说明

在货币类的开发中,判断两个货币对象是否相等是一个常见的操作。例如,在比较两个美元金额是否相等时,需要有明确的判断标准。如果没有正确定义相等性,可能会导致程序在进行货币比较、集合操作等场景下出现逻辑错误,影响程序的正确性。

在Python TDD中,定义对象的相等性对于确保代码的准确性和逻辑正确性至关重要。对于Dollar对象,我们需要明确在什么情况下两个Dollar对象被认为是相等的。

5.1 思路说明

通过实现__eq__方法(在Python中用于定义对象相等性的特殊方法),我们可以自定义Dollar对象的相等性判断逻辑。通常情况下,对于Dollar对象,当两个对象的金额相等时,我们认为它们相等。

5.2 测试代码

import unittest


class Dollar:
    def __init__(self, amount):
        self.amount = amount

    def __eq__(self, other):
        if isinstance(other, Dollar):
            return self.amount == other.amount
        return False


class TestDollarEquality(unittest.TestCase):
    def test_dollar_equality(self):
        dollar1 = Dollar(5)
        dollar2 = Dollar(5)
        self.assertEqual(dollar1, dollar2)

    def test_dollar_inequality(self):
        dollar1 = Dollar(5)
        dollar2 = Dollar(10)
        self.assertNotEqual(dollar1, dollar2)


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

5.3 源码说明

Dollar类中,__eq__方法首先使用isinstance函数判断传入的对象other是否为Dollar类的实例。如果是,则比较两个对象的amount属性是否相等;如果不是Dollar类的实例,则直接返回False。在测试类TestDollarEquality中,test_dollar_equality测试用例创建了两个金额都为5Dollar对象,验证它们是否相等;test_dollar_inequality测试用例创建了两个金额不同的Dollar对象,验证它们是否不相等,通过这两个测试用例确保__eq__方法的正确性。


http://www.kler.cn/a/510769.html

相关文章:

  • 大模型GUI系列论文阅读 DAY1:《基于大型语言模型的图形用户界面智能体:综述》
  • 21.1、网络设备安全概述
  • 锐捷路由器网关RG-NBR6135-E和锐捷交换机 Ruijie Reyee RG-ES224GC 电脑登录web方法
  • [创业之路-254]:《华为数字化转型之道》-1-华为是一个由客户需求牵引、高度数字化、高度智能化、由无数个闭环流程组成的价值创造、评估、分配系统。
  • Java并发编程:线程安全的策略与实践
  • LLM大语言模型的分类
  • pnpm安装
  • AUTOSAR从入门到精通-【自动驾驶】高精地图(五)
  • 接口测试自动化实战(超详细的)
  • 若依框架搭建学习
  • Electron实践继续
  • 使用 Helm 安装 Redis 集群
  • 自制游戏——国争
  • JavaScript系列(33)--微前端架构详解
  • C语言之装甲车库车辆动态监控辅助记录系统
  • 第一次在Gitee建仓传码
  • 迈向 “全能管家” 之路:机器人距离终极蜕变还需几步?
  • 多平台下Informatica在医疗数据抽取中的应用
  • SpringCloud -根据服务名获取服务运行实例并进行负载均衡
  • 中型项目中 HTTP 的挑战与解决方案
  • 大型系统中 HTTP 的优化与部署
  • STM32使用DSP库 Keil方式添加
  • 数据可视化大屏设计与实现
  • OpenWrt 中使用 LuCI 界面部署 Docker 镜像
  • 【C++学习篇】哈希表的实现
  • vue+高德API搭建前端3D交通页面