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

第8章:Python TDD处理货币类代码重复问题

写在前面


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

问题背景说明

在开发DollarFranc等多个货币类时,由于它们在功能和结构上存在相似性,很容易出现大量重复代码。这些重复代码不仅增加了代码量,还会使维护变得困难。通过处理代码重复问题,提取公共部分,能够提高代码的可读性和可维护性,减少潜在的错误和维护成本。
在Python TDD开发过程中,当存在多个类似的货币类(如DollarFranc)时,往往会出现代码重复的问题。我们需要对代码进行优化,减少重复代码,提高代码的可维护性。

8.1 思路说明

分析DollarFranc类中重复的代码部分,发现它们在结构和功能上有很多相似之处。我们可以创建一个通用的基类,将重复的代码提取到基类中,让DollarFranc类继承自这个基类,从而实现代码的复用。

8.2 测试代码

import unittest


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


class Dollar(Money):
    def __init__(self, amount):
        super().__init__(amount)


class Franc(Money):
    def __init__(self, amount):
        super().__init__(amount)


class TestMoney(unittest.TestCase):
    def test_dollar_inheritance(self):
        dollar = Dollar(5)
        self.assertEqual(dollar.amount, 5)

    def test_franc_inheritance(self):
        franc = Franc(10)
        self.assertEqual(franc.amount, 10)


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

8.3 源码说明

我们创建了Money基类,其中包含一个构造函数__init__用于初始化金额。Dollar类和Franc类都继承自Money类,通过super().__init__(amount)调用基类的构造函数来初始化金额。在测试类TestMoney中,test_dollar_inheritance测试用例验证了Dollar类继承后的金额初始化是否正确,test_franc_inheritance测试用例验证了Franc类继承后的金额初始化是否正确,确保继承关系和金额初始化功能的正确性。


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

相关文章:

  • 数据可视化大屏设计与实现
  • 微服务入门:从零开始构建你的微服务架构
  • cmake foreach 条件判断
  • 如何在服务器同一个端口下根据路径区分不同的应用
  • python中的RPA->playwright自动化录制脚本实战案例笔记
  • Lora理解QLoRA
  • 假设k8s集群规模上千,需要注意的问题有哪些?
  • 在 CentOS 7.9 上编译 Nginx 并启用 SSL 模块时遇到缺少 OpenSSL 源码的编译问题及解决方案
  • 1.18学习
  • 汽车 SOA 架构下的信息安全新问题及对策漫谈
  • 网络协议基础--HTTP协议
  • 解锁.NET配置魔法:打造强大的配置体系结构
  • 主从设备的同步(基于binlog和gtid实现同步)
  • TCP协议与TCP SYN Flood攻击
  • 【专题二 二叉树中的深搜】814. 二叉树剪枝
  • 解决 WSL 2 中 Ubuntu 22.04 安装 Docker 后无法启动的问题
  • 21.1、网络设备安全概述
  • Ubuntu22.04安装paddle GPU版本
  • Linux| ubuntu系统入门篇
  • 解决Spring Boot中Druid连接池“discard long time none received connection“警告
  • 分布式 ID 生成策略:应用场景与 ShardingSphere 实现
  • EPLAN 2024-电机保护开关符号,辅助触点
  • 有限元分析学习——Anasys Workbanch第一阶段笔记(13)网格单元分类、物理场与自由度概念
  • http://noi.openjudge.cn/——4.7算法之搜索——【169:The Buses】
  • 《王者荣耀》皮肤爬虫源码
  • 【漫话机器学习系列】050.epoch(迭代轮数)