寫在前面
這本書是我們老板推薦過的,我在《價值心法》的推薦書單里也看到了它。用了一段時間 Cursor 軟件后,我突然思考,對于測試開發工程師來說,什么才更有價值呢?如何讓 AI 工具更好地輔助自己寫代碼,或許優質的單元測試是一個切入點。 就我個人而言,這本書確實很有幫助。第一次讀的時候,很多細節我都不太懂,但將書中內容應用到工作中后,我受益匪淺。比如面對一些讓人抓狂的代碼設計時,書里的方法能讓我逐步深入理解代碼的邏輯與設計。 作為一名測試開發工程師,我想把學習這本書的經驗分享給大家,希望能給大家帶來幫助。因為現在工作中大多使用 Python 代碼,所以我把書中JAVA案例都用 Python 代碼進行了改寫 。
問題背景說明
在面向對象編程中,對類的實例變量進行合理的訪問控制是提高代碼安全性和穩定性的重要手段。對于Dollar
類的金額變量,如果直接暴露給外部隨意訪問和修改,可能會導致數據的不一致性和錯誤操作。通過探索實例變量私有化,限制外部對關鍵數據的直接操作,僅提供安全的訪問接口,能夠更好地保護數據的完整性,提升代碼的健壯性。
在Python TDD開發中,合理管理實例變量的訪問權限可以提高代碼的安全性和穩定性。對于Dollar
類的實例變量,我們嘗試進行私有化操作。
6.1 思路說明
Python中沒有像其他語言那樣嚴格的私有變量定義方式,但可以通過約定俗成的方式(如在變量名前加下劃線)來模擬私有變量。對Dollar
類的金額變量進行私有化處理,同時提供訪問和修改該變量的方法,以保證外部代碼只能通過特定的接口來操作實例變量,增強代碼的封裝性。
6.2 測試代碼
import unittestclass Dollar:def __init__(self, amount):self._amount = amountdef times(self, multiplier):return Dollar(self._amount * multiplier)def get_amount(self):return self._amountclass TestDollar(unittest.TestCase):def test_dollar_multiplication(self):five = Dollar(5)product = five.times(2)self.assertEqual(product.get_amount(), 10)if __name__ == '__main__':unittest.main()
6.3 源碼說明
在Dollar
類中,我們將金額變量命名為_amount
,使用單下劃線表示這是一個“私有”變量,雖然在Python中不能完全阻止外部訪問,但能起到一定的提示作用。times
方法在進行乘法運算時使用的是_amount
變量,確保內部運算的正確性。get_amount
方法用于提供外部獲取_amount
變量值的接口。在測試用例test_dollar_multiplication
中,創建了金額為5
的Dollar
對象five
,調用times
方法進行乘法運算后,通過get_amount
方法獲取結果并與預期值10
進行比較,驗證times
方法和get_amount
方法的正確性。