第8章:Python TDD处理货币类代码重复问题
写在前面
这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许优质的单元测试是一个切入点。 就我个人而言,这本书确实很有帮助。第一次读的时候,很多细节我都不太懂,但将书中内容应用到工作中后,我受益匪浅。比如面对一些让人抓狂的代码设计时,书里的方法能让我逐步深入理解代码的逻辑与设计。 作为一名测试开发工程师,我想把学习这本书的经验分享给大家,希望能给大家带来帮助。因为现在工作中大多使用 Python 代码,所以我把书中JAVA案例都用 Python 代码进行了改写 。
问题背景说明
在开发Dollar
和Franc
等多个货币类时,由于它们在功能和结构上存在相似性,很容易出现大量重复代码。这些重复代码不仅增加了代码量,还会使维护变得困难。通过处理代码重复问题,提取公共部分,能够提高代码的可读性和可维护性,减少潜在的错误和维护成本。
在Python TDD开发过程中,当存在多个类似的货币类(如Dollar
和Franc
)时,往往会出现代码重复的问题。我们需要对代码进行优化,减少重复代码,提高代码的可维护性。
8.1 思路说明
分析Dollar
和Franc
类中重复的代码部分,发现它们在结构和功能上有很多相似之处。我们可以创建一个通用的基类,将重复的代码提取到基类中,让Dollar
和Franc
类继承自这个基类,从而实现代码的复用。
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
类继承后的金额初始化是否正确,确保继承关系和金额初始化功能的正确性。