搜尋

搜尋結果

你開始寫 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; 杯雪糕涼下! 以上圖片均取自網路,所有版權歸原作者所有。