第13章:Python TDD完善貨幣加法運算(二)

寫在前面


這本書是我們老板推薦過的,我在《價值心法》的推薦書單里也看到了它。用了一段時間 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類功能不完善,但為后續實現多幣種加法奠定了基礎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66568.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66568.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66568.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

.Net Core微服務入門全紀錄(六)——EventBus-事件總線

系列文章目錄 1、.Net Core微服務入門系列(一)——項目搭建 2、.Net Core微服務入門全紀錄(二)——Consul-服務注冊與發現(上) 3、.Net Core微服務入門全紀錄(三)——Consul-服務注…

C#防止重復提交

C#防止重復提交 文章目錄 C#防止重復提交前言防止重復提交的思路Web API 防止重復提交代碼實現代碼講解使用方法 MVC防止重復提交總結 前言 當用戶在前端進行提交數據時,如果網絡出現卡頓和前端沒有給出響應的話顧客通常都會狂點提交按鈕,這樣就很容易導…

python學opencv|讀取圖像(三十九 )閾值處理Otsu方法

【1】引言 前序學習了5種閾值處理方法,包括(反)閾值處理、(反)零值處理和截斷處理,還學習了一種自適應處理方法,相關文章鏈接為: python學opencv|讀取圖像(三十三)閾值處理-灰度圖像-CSDN博客 python學o…

嵌入式硬件篇---PID控制

文章目錄 前言第一部分:連續PID1.比例(Proportional,P)控制2.積分(Integral,I)控制3.微分(Derivative,D)控制4.PID的工作原理5..實質6.分析7.各種PID控制器P控…

日志收集Day001

1.ElasticSearch 作用:日志存儲和檢索 2.單點部署Elasticsearch與基礎配置 rpm -ivh elasticsearch-7.17.5-x86_64.rpm 查看配置文件yy /etc/elasticsearch/elasticsearch.yml(這里yy做了別名,過濾掉空行和注釋行) yy /etc/el…

集合帖:前綴和及差分模板題 ← 一維及二維

【一維前綴和及一維差分知識點】 ● 一維“前綴和數組”預處理過程:cin>>a[i], sum[i]sum[i-1]a[i] 或者 cin>>sum[i], sum[i]sum[i-1] (1≤i≤n) ● 一維“區間和”計算過程:sum[y]-sum[x-1] (y…

《offer 來了:Java 面試核心知識點精講 -- 框架篇》(附資源)

繼上篇文章介紹了《offer 來了:Java 面試核心知識點精講 -- 原理篇》書后,本文章再給大家推薦兄弟篇 《offer來了:Java面試核心知識點精講--框架篇》, 簡直就是為Java開發者量身定制的面試神器。 本書是對Java程序員面試中常見的…

Low-Level 大一統:如何使用Diffusion Models完成視頻超分、去雨、去霧、降噪等所有Low-Level 任務?

Diffusion Models專欄文章匯總:入門與實戰 前言:視頻在傳輸過程中常常因為各種因素(如惡劣天氣、噪聲、壓縮和傳感器分辨率限制)而出現質量下降,這會嚴重影響計算機視覺任務(如目標檢測和視頻監控)的性能。現有的視頻修復方法雖然取得了一些進展,但通常只能針對特定的退…

Video-RAG:一種將視頻RAG新框架

1. 摘要及主要貢獻點 摘要: 檢索增強生成(RAG)是一種強大的策略,通過檢索與查詢相關的外部知識并將其整合到生成過程中,以解決基礎模型生成事實性錯誤輸出的問題。然而,現有的RAG方法主要集中于文本信息&…

Docker Load后存儲的鏡像及更改鏡像存儲目錄的方法

Docker Load后存儲的鏡像及更改鏡像存儲目錄的方法 Docker Load后存儲的鏡像更改鏡像存儲目錄的方法腳本說明注意事項Docker作為一種開源的應用容器引擎,已經廣泛應用于軟件開發、測試和生產環境中。通過Docker,開發者可以將應用打包成鏡像,輕松地進行分發和運行。而在某些場…

【零基礎入門unity游戲開發——unity通用篇37】鼠標指針(光標)修改隱藏鎖定(基于unity6開發介紹)

考慮到每個人基礎可能不一樣,且并不是所有人都有同時做2D、3D開發的需求,所以我把 【零基礎入門unity游戲開發】 分為成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要講解C#的基礎語法,包括變量、數據類型、運算符、流程控制、面向對象等,適合沒有編程基礎的…

親測解決Latex File ended while scanning use of \@@BOOKMARK

這個問題只要刪除了.tex后綴文件外的其他同名文件,再次編譯即可。 環境 Win11 MikTex 問題原因 編譯的時候用了好幾種編譯器,然后編譯出現了錯誤。生成了不能使用的引用。 解決方法 刪除.tex后綴文件外的其他同名文件后,再次編譯。 筆…

Amazon MSK 開啟 Public 訪問 SASL 配置的方法

1. 開啟 MSK Public 1.1 配置 MSK 參數 進入 MSK 控制臺頁面,點擊左側菜單 Cluster configuration。選擇已有配置,或者創建新配置。在配置中添加參數 allow.everyone.if.no.acl.foundfalse修改集群配置,選擇到新添加的配置。 1.2 開啟 Pu…

Windows FileZila Server共享電腦文件夾 映射21端口外網連接

我有這樣一個使用場景,在外部網絡環境下,通過手機便捷地讀取存儲在電腦上的視頻文件。比如在外出旅行、出差,身邊沒有攜帶電腦,僅依靠手機設備,就能隨時獲取電腦里存儲的各類視頻,無論是學習資料視頻、工作…

MySQL 實戰 4 種將數據同步到ES方案

文章目錄 1. 前言2. 數據同步方案 2.1 同步雙寫2.2 異步雙寫2.3 定時更新2.4 基于 Binlog 實時同步 3. 數據遷移工具選型 3.1 Canal3.2 阿里云 DTS3.3 Databus3.4 Databus和Canal對比3.4 其它 4. 后記 上周聽到公司新同事分享 MySQL 同步數據到 ES 的方案,發現很有…

虛幻基礎-1:cpu挑選(14600kf)

能幫到你的話,就給個贊吧 😘 文章目錄 ue非常吃cpu拉滿主頻打開項目編寫藍圖運行原因 時間長 關于壓力測試 本文以14600kf為例,雙12購入,7月份產。 ue非常吃cpu 經本人測試,ue是非常吃cpu的。 拉滿主頻 無論任何時間…

QTableWidget的簡單使用

1.最簡單的表格示例&#xff1a; ui->tableWidget->setRowCount(2);// 設置行數ui->tableWidget->setColumnCount(3);// 設置列數&#xff0c;一定要放在設置行表頭之前QStringList rowHeaderList;// 行表頭rowHeaderList << QStringLiteral("姓名"…

深入探究分布式日志系統 Graylog:架構、部署與優化

文章目錄 一、Graylog簡介二、Graylog原理架構三、日志系統對比四、Graylog部署傳統部署MongoDB部署OS或者ES部署Garylog部署容器化部署 五、配置詳情六、優化網絡和 REST APIMongoDB 七、升級八、監控九、常見問題及處理 一、Graylog簡介 Graylog是一個簡單易用、功能較全面的…

2024年我的技術成長之路

2024年我的技術成長之路 大家好&#xff0c;我是小寒。又到年底了&#xff0c;一年過得真快啊&#xff01;趁著這次活動的機會&#xff0c;和大家聊聊我這一年在技術上的收獲和踩過的坑。 說實話&#xff0c;今年工作特別忙&#xff0c;寫博客的時間比去年少了不少。不過還是…

嵌入式硬件篇---基本組合邏輯電路

文章目錄 前言基本邏輯門電路1.與門&#xff08;AND Gate&#xff09;2.或門&#xff08;OR Gate&#xff09;3.非門&#xff08;NOT Gate&#xff09;4.與非門&#xff08;NAND Gate&#xff09;5.或非門&#xff08;NOR Gate&#xff09;6.異或門&#xff08;XOR Gate&#x…