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

第9章:Python TDD解决货币对象相等性比较难题

写在前面


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

问题背景说明

在之前定义货币对象相等性时,仅考虑金额相等可能不够全面。当存在多种货币类时,不同货币对象即使金额相同也不应视为相等。解决这个问题可以避免在涉及多种货币的操作中出现逻辑混淆,确保程序在处理货币比较时的准确性和合理性。

在Python TDD中,当涉及到不同货币类(如DollarFranc)对象的相等性比较时,会遇到一些问题。我们需要完善相等性比较的逻辑,确保比较结果的正确性。

9.1 思路说明

之前定义的DollarFranc类的相等性判断仅基于金额,这在不同货币类之间比较时是不准确的。我们需要在相等性判断中加入货币类型的比较,只有当货币类型相同且金额相等时,两个货币对象才被认为相等。

9.2 测试代码

import unittestclass Money:def __init__(self, amount):self.amount = amountdef __eq__(self, other):if isinstance(other, Money):return self.amount == other.amount and self.__class__ == other.__class__return Falseclass Dollar(Money):def __init__(self, amount):super().__init__(amount)class Franc(Money):def __init__(self, amount):super().__init__(amount)class TestMoneyEquality(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)def test_different_currency_inequality(self):dollar = Dollar(5)franc = Franc(5)self.assertNotEqual(dollar, franc)if __name__ == '__main__':unittest.main()

9.3 源码说明

Money类的__eq__方法中,我们在判断对象是否相等时,除了比较金额self.amount == other.amount,还增加了比较对象的类类型self.__class__ == other.__class__。这样,只有当两个对象都是Money类的子类且金额相等时,才认为它们相等。在测试类TestMoneyEquality中,test_dollar_equalitytest_dollar_inequality测试用例分别验证了Dollar对象的相等和不相等情况,test_different_currency_inequality测试用例验证了不同货币类(DollarFranc)对象不相等的情况,确保相等性判断逻辑的正确性。

http://www.lryc.cn/news/524387.html

相关文章:

  • 更新布局元素的属性
  • UDP協議與代理IP介紹
  • QT 中 UDP 的使用
  • leetcode刷题记录(七十二)——146. LRU 缓存
  • 深圳大学-计算机系统(3)-实验一MIPS指令集实验
  • Java面试专题——面向对象
  • 知行合一:解决有心无力的问题,解决知易行难的问题,知行合一并不意味着事事都要合一,而是....
  • Qt中自定义信号与槽
  • .NET 8 项目 Docker 方式部署到 Linux 系统详细操作步骤
  • 深入了解 Java split() 方法:分割字符串的利器
  • pgsql中处理数组类型字段
  • 如何正确定位前后端bug?
  • mfc操作json示例
  • 【技术总结类】2024,一场关于海量数据治理以及合理建模的系列写作
  • Dockerfile另一种使用普通用户启动的方式
  • python的pushbullet库在设备之间发送通知链接文件
  • STM32之FreeRTOS开发介绍(十九)
  • 用java配合redis 在springboot上实现令牌桶算法
  • DCGAN - 深度卷积生成对抗网络:基于卷积神经网络的GAN
  • 51c~SLAM~合集1
  • 优化使用 Flask 构建视频转 GIF 工具
  • spring cloud如何实现负载均衡
  • leetcode19-删除链表的第n结点
  • 软件测试—— 接口测试(HTTP和HTTPS)
  • 3.1 Go函数调用过程
  • TDengine 做 Apache SuperSet 数据源
  • 08_游戏启动逻辑
  • Ardupilot开源无人机之Geek SDK进展2024-2025
  • 在K8S中,如果后端NFS存储的IP发送变化如何解决?
  • 模拟飞行入坑(五) P3D 多通道视角配置 viewgroup