網(wǎng)站被k的怎么辦泰安網(wǎng)站seo
寫在前面
這本書是我們老板推薦過的,我在《價值心法》的推薦書單里也看到了它。用了一段時間 Cursor 軟件后,我突然思考,對于測試開發(fā)工程師來說,什么才更有價值呢?如何讓 AI 工具更好地輔助自己寫代碼,或許優(yōu)質的單元測試是一個切入點。 就我個人而言,這本書確實很有幫助。第一次讀的時候,很多細節(jié)我都不太懂,但將書中內容應用到工作中后,我受益匪淺。比如面對一些讓人抓狂的代碼設計時,書里的方法能讓我逐步深入理解代碼的邏輯與設計。 作為一名測試開發(fā)工程師,我想把學習這本書的經(jīng)驗分享給大家,希望能給大家?guī)韼椭?。因為現(xiàn)在工作中大多使用 Python 代碼,所以我把書中JAVA案例都用 Python 代碼進行了改寫 。
問題背景說明
在之前定義貨幣對象相等性時,僅考慮金額相等可能不夠全面。當存在多種貨幣類時,不同貨幣對象即使金額相同也不應視為相等。解決這個問題可以避免在涉及多種貨幣的操作中出現(xiàn)邏輯混淆,確保程序在處理貨幣比較時的準確性和合理性。
在Python TDD中,當涉及到不同貨幣類(如Dollar
和Franc
)對象的相等性比較時,會遇到一些問題。我們需要完善相等性比較的邏輯,確保比較結果的正確性。
9.1 思路說明
之前定義的Dollar
和Franc
類的相等性判斷僅基于金額,這在不同貨幣類之間比較時是不準確的。我們需要在相等性判斷中加入貨幣類型的比較,只有當貨幣類型相同且金額相等時,兩個貨幣對象才被認為相等。
9.2 測試代碼
import unittestclass Money:def __init__(self, amount):self.amount = amountdef __eq__(self, other):if isinstance(other, Money):return self.amount == other.amount and self.__class__ == other.__class__return Falseclass Dollar(Money):def __init__(self, amount):super().__init__(amount)class Franc(Money):def __init__(self, amount):super().__init__(amount)class TestMoneyEquality(unittest.TestCase):def test_dollar_equality(self):dollar1 = Dollar(5)dollar2 = Dollar(5)self.assertEqual(dollar1, dollar2)def test_dollar_inequality(self):dollar1 = Dollar(5)dollar2 = Dollar(10)self.assertNotEqual(dollar1, dollar2)def test_different_currency_inequality(self):dollar = Dollar(5)franc = Franc(5)self.assertNotEqual(dollar, franc)if __name__ == '__main__':unittest.main()
9.3 源碼說明
在Money
類的__eq__
方法中,我們在判斷對象是否相等時,除了比較金額self.amount == other.amount
,還增加了比較對象的類類型self.__class__ == other.__class__
。這樣,只有當兩個對象都是Money
類的子類且金額相等時,才認為它們相等。在測試類TestMoneyEquality
中,test_dollar_equality
和test_dollar_inequality
測試用例分別驗證了Dollar
對象的相等和不相等情況,test_different_currency_inequality
測試用例驗證了不同貨幣類(Dollar
和Franc
)對象不相等的情況,確保相等性判斷邏輯的正確性。