搜尋

搜尋結果

你開始寫 Spring Boot 測試案例了嗎?
科技新知
MacauYeah・2025-11-29

雖然筆者過往做 spring boot framework 教學中,都有滲入一些測試用例。筆者也曾經困惑了很長一段時間,所以就獨立開一個主題,聊一下筆者在實務上對spring boot test 的理解。 測試案例究竟測試什麼? 測試用例 test case 是確保你的程式碼正確性與穩定性的重要步驟,但在 framework 下,並不是所有功能都很容易寫成測試。所以在討論 framework 測試之前,釐清測試的本質。 function input business logic function output 這意味著我們輸入某些資料(input),然後經過業務邏輯(business logic)的處理,最後產生結果輸出(output)。 我們的測試目標,其實就是確保業務邏輯正確。而我們的手段就是經檢查概定的輸入資料,核對輸出結果。 那麼只要我們可以生成輸入資料,就一定可以檢查輸出結果了吧?其實不是的,因為實務上的輸入和輸出沒有這麼簡單。筆者常接觸到的輸入輸出如下 輸入 function 輸入參數 系統狀態資料,例如:資料庫狀態、外部API結果。 輸出 function 輸出參數 寫入系統(影響到)的資料,例如:資料庫狀態、使用外部API時的輸入參數。 總之就是考慮了狀態機 state machine 的問題,每個狀態外部輸入都是一個測試用例,然後核對狀態機去了下一個什麼狀態。 言下之意,我們就是暴力地生成輸入參數和模擬狀態資料,道理上就是可以進行測試。 Spring boot web framework 中,我們又會測試什麼? function input business logic function output在Spring boot web就變成如下 controller request business logic controller response在 Spring Boot test 中,我們可以用模擬的 MVC MockMvc 測試來驗證 controller 的行為。不過,其實進入 controller 前經過很多系統轉換,而這些道理上跟Framework的技術大相關,與業務邏輯小相關。所以為免折磨自己,可以將業務邏輯單獨封裝成服務(service)。之後直接測試服務 ,易寫也易讀。 controller request service input business logic service output controller response道理上 controller 能做的業務邏輯,服務 service 都可以無腦重現。這樣還可以重用服務,減少測試的數量。 如何實現輸入? 直接 new Object。大部份的情況下,因為業務是自己編寫的,應該都可以直接 new 出來。 經 json 檔讀入。如果輸入的參數量太多,逐個經 java new 是很耗時的,我們可以經 json 反序列化變成 Object。但這亦只限於自己可以操作改寫的類。 Mockito 模擬那些無法簡易經 new 或 json 反序列化的 Object。例如:spring security authentication object 我們在使用時,其實只看到 interface。我們難似自己實現一個可以反序列化的類,那麼我們可以使用 Mockito 來模擬這些資料。一些外部API的結果,我們也可以用使 Mockito 來模擬。 什麼情況下不進行測試? 有些情況下,我們可能選擇不對某些功能進行測試,原因可能包括對功能的了解不足或是單純的懶惰。以下是一些例子: 僅進行配置的Function:如果你的 Function 只是在 Framework 中填寫配置,而且你並不太了解它的運作原理,可能就不需要進行測試了。例如,Spring boot web 中,需要大家配置一個SecurityFilterChain Object,它要求大家將 HttpSecurity 轉換為 SecurityFilterChain 。因為輸入的 HttpSecurity 是系統固定的參數,我們亦沒有檢查它的狀態。這種情況下,它的輸入及輸出,其實我們都沒有真正理解。我們硬測試的話,測試功能可能只流於表面。若我們真的要做測試,也是經過MockMvc進行端到端測試(endtoend testing),測試它在事後的影響範圍。 單純的框架功能:例如資料庫的儲存庫介面(repository interface),雖然是在框架下生成的,對於自己手動調整的部份功能,筆者通常亦不會進行單獨測試,通常都會搭配業務邏輯一起進行。它可以使用 Mockito 進行模擬測試,或用測試環境的真實資料庫進行測試。 面對的挑戰 總括來講,筆者盡可能地把測試用例限定在業務邏輯中,就可以大大地降低寫測試的技術難度。但筆者還是有些問題並未完美解決。 測試用例的數量可能很多,因此共用與維護變得相當困難。逐個用例獨立編寫輸入也是很累的。對於 Mockito 的使用,筆者還是可免則免。因為要逐個功能模擬,編寫量就指數提高,這亦難似配合外部變化。一般來說,能優先使用測試環境或者 Docker 來模擬環境的,就盡量用。 離線開發、離線測試。系統依懶的外部功能越多,想做單機開發的難度就越高。即使前述有 Docker 測試,對於持續整合(CI)來講也是有一定難度。那麼這時,Mockito 就是一個可取的選擇。但這又回到編寫量及難以偵測外部變化問題。 希望這篇文章能幫助你更好地理解測試案例的編寫方向,並在Spring boot web開發中加入你自己的測試!

咖啡迷福音!Starbucks Reserve™ 插旗澳門美獅美高梅 同場加映:咖啡大師教你呷啡四大步驟
澳城餐飲
Cheers!・2018-03-09

在澳門想飲一杯高質咖啡,選擇其實不算多。但隨著美獅美高梅開幕而登陸澳門的「Starbucks Reservetrade; Coffee Experience Bar」,就由咖啡大師打骰,提供 6 種沖調方法和多款由全球搜羅而來的珍貴咖啡豆,帶來另類嘆啡體驗! Reserve Coffee Experience Bar 以開放式設計,Bar 枱上放有不同的沖泡工具,由咖啡師即席沖啡。 這間星巴克佔地 4,500 呎,是澳門區最大的分店。 6 種沖調方法 + 1% 超高質阿拉比卡咖啡豆 有別於一般的星巴克,Starbucks Reserve 只選用品質最高的阿拉比卡咖啡豆,再挑選其中最優質及具獨特風味的 1%,配搭不同的咖啡沖調方法及飲品,包括:氮氣冷萃咖啡(Nitro Cold Brew)、虹吸(Siphon)、手沖(Pour Over)、濾壓壺(Coffee Press)、Chemex 咖啡壺及 Black Eagle 半自動特濃咖啡機。加上約每 78 星期轉換一次咖啡豆,保證每次呷啡都有新鮮感。 分店特意引進歷經超過 14 小時冷萃,並以優質技術注入氮氣的咖啡,必試! Starbucks Reservetrade; 咖啡豆會定期(約 78 星期)更換,Keep 住帶比大家的新鮮感。 分店更特意請來澳門土生土長的藝術家霍凱盛創作了一系列融入葡萄牙色彩的藝術作品。 「星粉」一定不能錯過澳門美獅美高梅分店獨家發售的 Starbucks Reservetrade; 系列商品!(MOP 130 480) 咖啡雪芳蛋糕(MOP 43) 、野莓朱古力蛋糕(MOP 43)和烤牛肉法式三文治(MOP 58)都是星巴克的新品,配搭咖啡一流。(左至右) 咖啡大師教路!呷啡四大步驟 小編邊睇咖啡師沖啡的同時,亦不忘向咖啡師取經,請教了品嚐精品咖啡的正確步驟。共可分成輕聞、輕啜、細味及描述四大步驟。 ► 輕聞:以手掌作杯蓋,慢慢吸入咖啡香氣。 ► 輕啜:剛沖好的咖啡溫度較高,所以輕呷咖啡,慢慢品嚐咖啡的味道。 ► 細味:大口喝下,讓咖啡停留口腔 2 秒左右,全方位感受咖啡的特性。 ► 描述:最後可形容咖啡的口感及自身體會。 澳門美獅美高梅星巴克 地址:澳門美獅美高梅 G 層 120 號鋪 開放時間:星期日至星期四及公眾假期 0730 ndash; 2300;星期五、星期六及公眾假期前夕 0730 ndash; 0000

你今日揀啱要 Send 嘅 Emoji 未呢?
娛樂殿堂
Chrysalids 少爺・2017-08-03

好多時候我地都會用一個甚至係幾個唔同嘅表情符號 Emoji 配搭黎回覆訊息, 可能係因為忙,又或者係想表現得有型啲 cool 啲等等原因。 但每一次用 Emoji 嘅時候,你會唔會煩用邊一個先至啱或者夠 chok 呢? 今日筆者想推薦一部新上映嘅電影 ldquo;Emoji 大冒險rdquo;。 有睇過預告嘅都大慨知道故事係講述表情符號 ldquo;阿基rdquo; 天生可以做唔到嘅表情, 但係表情符號世界裹面,每個表情符號只能夠允許做一個獨特嘅表情, 所以 ldquo;阿基rdquo; 被認為係有問題,需要被刪除。 ldquo;阿基rdquo; 希望可以揾到幫手修復自已,所以離開手機。 途中更遇到俾個五High Five 同埋駭客 JB JailBreak 一齊展開冒險旅程。 雖然網上評論大多都係負面,評分也較低, 甚至用呢套戲同 ldquo;腦筋急轉彎 Inside Outrdquo; 等其它相似電影一齊比較, 以顯得呢部電影有幾失敗,有幾遜色, 但筆者認為一定要入戲院睇一睇。 第一個原因係想像力。 雖然筆者仲未睇呢部電影,或者欠缺說服力, 但如果單單從想像力方面黎睇, 呢套電影有一定高分數。 表情符號無時無刻只會做一個表情, 無人會想像下如果表情符號都識郁、識講野、有自己嘅諗法係幾咁得意架咩? 第二個原因係教育意義。 ldquo;阿基rdquo; 因為天生可以做到其它所有表情符號都做唔到嘅野, 所以被評定為有問題,要趕走,要消除。 相反地,筆者認為 ldquo;阿基rdquo; 係最傑出最出色嘅表情符號, 佢甚至可以創造出全新獨有嘅表情。 就好似現今社會,不公平嘅狀況周不時發生係我地嘅左右, 有傑出能力嘅人、有不凡智慧嘅人、 有才華洋溢嘅人往往因為周邊嘅人妒忌而無法把自身能力發揮出黎,甚至被趕絕。 所以呢部電影好值得我地去反思探討下點解會出現「有志難伸」呢種境況。 基於以上兩個原因,筆者個人認為呢部電影有一定嘅趣味性和娛樂性, 所以如果有時間有興趣,不妨入戲院觀賞一下。 睇完戲,可以順便去埋南灣雅文湖畔抽 Emoji 扭蛋機! P.S. 依家天氣咁熱,筆者請大家 ldquo;睇rdquo; 杯雪糕涼下! 以上圖片均取自網路,所有版權歸原作者所有。

幸村 - 拾金大國
環宇搜奇
幸村・2023-08-11

早幾日唔小心漏了部iPad在珠海的士上,甚慌。 朋友安慰:「定啦,係澳門唔敢講,係大陸遺失銀包或電子產品,八成可以揾得返。」 結果第二日就收到司機電話,說您的iPad已經找到,妥妥的,讓小弟感動了好一陣子。 呢個當然同滴水不漏的監控有關,不過之前睇過一個日本節目,日本人每年撿到並交給警察的錢總和,可以達到驚人的一百八十九億日元,折合成澳門幣大約是十億。這無疑充分體現了日本國民的高素質。 我問過我的日本同學關於這個現象,他只說日本人執到錢,第一個想法就是交給警察,學校也是這樣教的。 問題是,相信世界上總沒有學校,會教導學生們執到錢應該拎返屋企吧。 於是又查了一下法例,原來日本執到錢拎返屋企,罰得最重係會留案底。 跟據日本刑法第254條,如果拾金而上不交警察,就觸犯「遺失物等橫領罪」,即非法占有的意思,除了罰錢之外,仲有可能面臨一年以下的有期徒刑。 在日本,社會特別重視個人的信譽,這樣被留案底真得不償失。 然而,日本也有法律鼓勵人們撿到錢後將其交給警察。跟據《遺失物法》,如果失主有幸找到他的失物,就要向拾獲者支付失物的百分之五至二十的報酬金,但一般來說,大家都會支付百分之十的報酬。 最令人哭笑不得的是,就是拾獲者所獲的報酬金仲係要交「個人所得稅」。 一般警察收到失物後都會先做登記,兩個星期之內就會張貼公告,只要三個月後失物無人認領,失物就會全歸撿獲者所有。 總的來講,日本的這種拾金不昧的文化和制度不僅提供了一種有效的方式來處理遺失物,更反映了日本社會的公平、誠實的價值觀。從學校教育到法律制度,都在強化這種文化,並將其深深地植入到每一個日本人的心中。

幸村 - 榴槤馬介休
環宇搜奇
幸村・2023-07-05

落雨濕濕,大雨到雨衣都無效化,唯有泊好部老電,過隔離塔巴士返屋企。 唔知係咪過咗高峰上落班時間,巴士就唔係好多人,上到車都有位坐,坐低咪安安樂樂打鋪機,理得佢幾大雨。 甫坐低,就有一股奇異的飄香鑽入鼻孔,似榴槤加馬介休,心諗邊個會食得咁刁鑽?周圍望下揾揾那味道的源頭。 原來係右前方,有一個翹腳的大叔,對鞋放係地上,那馬介休味道明顯從他「生醃」了一段時間的腳傳出黎。 罪過!唔怪之巴士會無人,諗到呢度,孰不可忍,唯有落車,只怪小弟意志不夠堅強。 日本每年都有組織調查最讓人討厭的乘搭電車行為,十年以來穩居榜首的是「讓人不悅的坐法」,坐到隔離都無位坐,或者翹腳,已經係最令人頂唔順的迷惑行為。 唔俾翹腳係有啲嚴格,但阿叔當車箱係屋企咁脫鞋,已經算係突破了次元。 第二是車箱裏大聲喧嘩說話,呢個相信大家都略有耳聞,日本搭車的確無人會大聲打電話,並不出奇。 反而第三位「耳機大聲漏出聲音」,這就有點吹毛求疵,唔少人坐車就聽歌煲劇,估唔到發出了丁點聲音也構成了對其他人的騷擾。 還有一項特別的迷惑行為,就是女性在車箱裏化妝,想不到也榜上有名,難道畫個眼線也騷擾到人嗎?百思之下,唯有諗到塗指甲油最合邏輯,令天拿水味充斥車箱,確係頗令人迷惑。 老老實實,小弟咁大過還未見過有人會係巴士上塗指甲油,其實公共交通不影響到人只是很基本的公德。如果下次有調查採訪最讓人討厭的乘搭電車行為,我會提議不要帶榴槤馬介休上車。