寫在前面
這本書是我們老板推薦過的,我在《價值心法》的推薦書單里也看到了它。用了一段時間 Cursor 軟件后,我突然思考,對于測試開發工程師來說,什么才更有價值呢?如何讓 AI 工具更好地輔助自己寫代碼,或許優質的單元測試是一個切入點。 就我個人而言,這本書確實很有幫助。第一次讀的時候,很多細節我都不太懂,但將書中內容應用到工作中后,我受益匪淺。比如面對一些讓人抓狂的代碼設計時,書里的方法能讓我逐步深入理解代碼的邏輯與設計。 作為一名測試開發工程師,我想把學習這本書的經驗分享給大家,希望能給大家帶來幫助。因為現在工作中大多使用 Python 代碼,所以我把書中JAVA案例都用 Python 代碼進行了改寫 。
問題背景說明
在現實世界中,貨幣交易往往涉及不同幣種之間的運算。僅實現同幣種的加法運算無法滿足實際需求。因此,需要引入“銀行”對象來處理匯率轉換問題,完善貨幣加法運算功能,使其能夠正確處理不同幣種的相加操作,增強貨幣類的實用性和功能性。
考慮到實際情況,貨幣加法可能涉及不同幣種,這需要我們進一步優化代碼,在Python TDD流程中不斷完善功能。
13.1 思路說明
引入“銀行”(Bank
)對象來處理匯率轉換問題。將貨幣的總和視為一個表達式,每種貨幣是表達式的原子形態。通過Bank
類的方法來根據匯率將不同幣種的貨幣轉換后再進行加法運算。
13.2 測試代碼
import unittestclass Bank:def reduce(self, source, to):return Money.dollar(10) # 暫時的啞實現class Money:def __init__(self, amount, currency):self.amount = amountself.currency = currencydef plus(self, addend):return Money(self.amount + addend.amount, self.currency)def reduce(self, bank, to):return bank.reduce(self, to)class Dollar(Money):def __init__(self, amount):super().__init__(amount, "USD")class TestMoneyAddition(unittest.TestCase):def test_simple_addition(self):five_dollars1 = Dollar(5)five_dollars2 = Dollar(5)bank = Bank()result = five_dollars1.plus(five_dollars2).reduce(bank, "USD")self.assertEqual(result.amount, 10)self.assertEqual(result.currency, "USD")if __name__ == '__main__':unittest.main()
13.3 源碼說明
新增Bank
類,目前reduce
方法是啞實現,僅返回一個固定的Money
對象。Money
類中新增reduce
方法,用于將貨幣對象通過Bank
類進行轉換。在測試用例中,對相加后的貨幣對象調用reduce
方法,并驗證結果。雖然當前Bank
類功能不完善,但為后續實現多幣種加法奠定了基礎。