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

第14章:Python TDD应对货币类开发变化(一)

写在前面


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

问题背景说明

在软件开发过程中,需求变化是不可避免的。在货币类开发中,客户可能提出实现不同币种货币转换的需求。通过编写新的测试用例来驱动代码的修改和扩展,能够使代码更好地适应需求变化,保持代码的灵活性和可维护性。

在开发过程中,需求可能会发生变化。比如需要实现不同币种货币的转换,这在Python TDD中需要通过编写新测试用例来驱动代码的修改。

14.1 思路说明

以将2瑞士法郎(Franc)转换成1美元(Dollar)为例,编写测试用例来验证转换功能。然后根据测试需求,在相关类中实现转换逻辑。

14.2 测试代码

import unittest


class Bank:
    def addRate(self, from_currency, to_currency, rate):
        pass

    def rate(self, from_currency, to_currency):
        pass

    def reduce(self, source, to):
        pass


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

    def reduce(self, bank, to):
        pass


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


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


class TestCurrencyConversion(unittest.TestCase):
    def test_reduce_money_different_currency(self):
        bank = Bank()
        bank.addRate("CHF", "USD", 2)
        franc = Franc(2)
        result = franc.reduce(bank, "USD")
        self.assertEqual(result.amount, 1)
        self.assertEqual(result.currency, "USD")


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

14.3 源码说明

在测试类TestCurrencyConversion中,test_reduce_money_different_currency测试用例创建了一个Bank对象,并设置瑞士法郎到美元的汇率为2。创建一个金额为2的Franc对象,调用reduce方法进行货币转换,验证转换后的金额和货币类型是否正确。此时Bank类和Money类中的相关方法都是未实现的占位代码,后续将根据测试需求逐步完善。


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

相关文章:

  • 芯片详细讲解,从而区分CPU、MPU、DSP、GPU、FPGA、MCU、SOC、ECU
  • React的应用级框架推荐——Next、Modern、Blitz等,快速搭建React项目
  • AUTOSAR从入门到精通-城市NOA(领航辅助驾驶)
  • 记录node-sass无法安装的问题
  • 微信小程序-base64加解密
  • 构建安全防线:基于视频AI的煤矿管理系统架构创新成果展示
  • PyTorch 卷积神经网络全解析:从原理到实践
  • Ubuntu22.4挂载大于2.2T磁盘(27T大磁盘)
  • 递归练习三(决策树)
  • 53,【3】BUUCTF WEB october 2019 Twice SQLinjection
  • 82.提取条件模式
  • BUUCTF_Web([GYCTF2020]Ezsqli)
  • Linux中的文件上传和下载
  • 前后端分离的Java快速开发平台
  • 【万图找码】在大量图片中快速找出有二维码的图片
  • TP4056锂电池充放电芯片教程文章详解·内置驱动电路资源!!!
  • Web3 时代,区块链与物联网的融合创新前景
  • Axios 封装:处理重复调用与内容覆盖问题
  • node_exporter 集成Prometheus+Grafana
  • ingress-nginx代理tcp使其能外部访问mysql
  • reac 后端接口返回二进制文件流前端导出文件
  • 主控制器与子模块通讯协议
  • 要获取本地的公网 IP 地址(curl ifconfig.me)
  • 【Compose multiplatform教程】05 IOS环境编译
  • Linux(DISK:raid5、LVM逻辑卷)
  • 基于GRU实现股价多变量时间序列预测(PyTorch版)