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

写在前面


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


问题背景说明

在面对不同币种货币转换的需求时,之前的代码结构和实现方式可能无法满足。为了使代码能够正确实现货币转换功能,需要对代码进行重构和方法调整。这不仅可以解决当前的需求变化问题,还能优化代码结构,为后续可能的功能扩展奠定更好的基础。

为了使不同币种货币转换的测试用例通过,需要对代码进行重构和方法调整,这是Python TDD适应变化的重要体现。

15.1 思路说明

Bank类中实现汇率存储和查询功能,在Money类的reduce方法中根据汇率进行货币转换。同时,调整相关类的结构和方法调用,确保代码逻辑的正确性。

15.2 测试代码

python 复制代码
import unittest


class Bank:
    def __init__(self):
        self.rates = {}

    def addRate(self, from_currency, to_currency, rate):
        self.rates[(from_currency, to_currency)] = rate

    def rate(self, from_currency, to_currency):
        if from_currency == to_currency:
            return 1
        return self.rates.get((from_currency, to_currency), 1)

    def reduce(self, source, to):
        if isinstance(source, Money):
            rate = self.rate(source.currency, to)
            return Money(source.amount / rate, to)


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

    def reduce(self, bank, to):
        return bank.reduce(self, to)


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()

15.3 源码说明

Bank类中新增rates字典用于存储汇率。addRate方法用于添加汇率,rate方法用于查询汇率,考虑了同币种汇率为1的情况。reduce方法根据汇率将Money对象转换为指定货币。Money类的reduce方法调用Bank类的reduce方法。测试用例验证了不同币种货币转换功能的正确性。

相关推荐
菜狗想要变强2 天前
Linux驱动开发--异步通知与异步I/O
linux·运维·驱动开发
Ant?12 天前
rk3588 驱动开发(二)第四章嵌入式 Linux LED 驱动开发实验
linux·运维·驱动开发
weixin_461259413 天前
3、有Bluetooth,LCD,USB,SD卡,PSRAM,FLASH、TP等软硬件驱动开发经验优先考虑
驱动开发
muyouking114 天前
9.Rust+Axum 测试驱动开发与性能优化全攻略
驱动开发·性能优化·rust
sukalot4 天前
Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(十)
驱动开发
痆古酊旳琲伤6 天前
Linux驱动开发1 - Platform设备
linux·驱动开发
菜狗想要变强6 天前
Linux驱动开发--阻塞、非阻塞I/O
linux·数据结构·驱动开发·链表
Ant?16 天前
rk3588 驱动开发(一)字符设备开发
驱动开发
程序员JerrySUN8 天前
驱动开发硬核特训 · Day 11(下篇):从 virtio_blk 看虚拟总线驱动模型的真实落地
linux·驱动开发·嵌入式硬件
Despacito0o8 天前
FreeRTOS二值信号量详解与实战教程
驱动开发·stm32·单片机·嵌入式硬件·mcu·51单片机·嵌入式实时数据库