寫在前面
這本書是我們老板推薦過的,我在《價值心法》的推薦書單里也看到了它。用了一段時間 Cursor 軟件后,我突然思考,對于測試開發工程師來說,什么才更有價值呢?如何讓 AI 工具更好地輔助自己寫代碼,或許優質的單元測試是一個切入點。 就我個人而言,這本書確實很有幫助。第一次讀的時候,很多細節我都不太懂,但將書中內容應用到工作中后,我受益匪淺。比如面對一些讓人抓狂的代碼設計時,書里的方法能讓我逐步深入理解代碼的邏輯與設計。 作為一名測試開發工程師,我想把學習這本書的經驗分享給大家,希望能給大家帶來幫助。因為現在工作中大多使用 Python 代碼,所以我把書中JAVA案例都用 Python 代碼進行了改寫 。
問題背景說明
在面對不同幣種貨幣轉換的需求時,之前的代碼結構和實現方式可能無法滿足。為了使代碼能夠正確實現貨幣轉換功能,需要對代碼進行重構和方法調整。這不僅可以解決當前的需求變化問題,還能優化代碼結構,為后續可能的功能擴展奠定更好的基礎。
為了使不同幣種貨幣轉換的測試用例通過,需要對代碼進行重構和方法調整,這是Python TDD適應變化的重要體現。
15.1 思路說明
在Bank
類中實現匯率存儲和查詢功能,在Money
類的reduce
方法中根據匯率進行貨幣轉換。同時,調整相關類的結構和方法調用,確保代碼邏輯的正確性。
15.2 測試代碼
import unittestclass Bank:def __init__(self):self.rates = {}def addRate(self, from_currency, to_currency, rate):self.rates[(from_currency, to_currency)] = ratedef rate(self, from_currency, to_currency):if from_currency == to_currency:return 1return 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 = amountself.currency = currencydef 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
方法。測試用例驗證了不同幣種貨幣轉換功能的正確性。