寫單元測試,我不認為是件容易的事

2022-09-07 17:45:11 字數 1176 閱讀 9275

這是乙個40多歲還在編碼的老程式設計師對單元測試的理解和實踐。裡面沒有廢話,希望每句話能說到你心坎裡。

自己的含義:方法邊界內的主體邏輯。一切下游方法、框架依賴、外部io等都不是自己。如spring、 外部資料庫都視為外部邏輯。

每個方法有自己獨立的單元測試,這有利於ide在單元測試與邏輯**間跳躍,便於定位,並降低**結構調整的影響範圍。

因每個方法有自己的單元測試,所以當前測試不要涵蓋下游方法的功能測試。以避免邏輯改動造成不必要的影響範圍擴大。

要想單元測試更易於維護,良好的設計是前提

開發也是可以分層的,先進行框架開發後進行具體開發。如先定義好所有的介面和要傳遞的資料,並組織好控制層,然後測試和具體開發便可同時展開。這樣便可提前發現結構性問題,提前對設計進行驗證,減少後期結構性調整對單元測試的影響。

盡量應用單一職責設計模式,使邏輯模組化,並使用老闆原則將這些模組串起來。這對於類的內部實現尤其重要,因為這會影響單元測試的覆蓋能力。

只有這樣每個方法的邏輯才能簡單,對應的單元測試自然便於維護。作為老闆的控制類或方法不必苛求單元測試,可酌情選擇是否單元測試,因為控制是少數派,且實質邏輯已經被分攤到模組中。

這是單一職責的延申,資料的載入、處理與輸出是可以作為獨立的三個職責的。其中資料的載入和輸出往往與外部環境依賴有關,本身的測試意義不大,即便測試也不能到處執行,且測試執行效率低下。

所以我們需要將io邏輯從處理邏輯中剝離,並放到外層的控制邏輯中去並用mock來解決。這樣沒有外部依賴的處理邏輯——核心,將得到簡化,從而單元測試得到簡化。

如果中間實在需要外部io可考慮在io處進行邏輯拆分,這樣拆分後的子邏輯中就沒有了io依賴,從而得到簡化。

有時候單元測試是脫離不了環境的,如我們想驗證一下 sql 的正確性。此時建議在單元測試上應用@disabled註解,以便在 mvn test 中忽略這些測試,從而保證測試可以到處執行。

請盡量避免對框架的依賴,如 spring 的 @autowired 注入機制,這會巨幅增加單元測試的構建難度,巨幅增加單元測試的耗時,因為這會對 mock 物件的注入造成困難。

建議,使用構造注入代替屬性注入,這樣就可以擺脫對 spring 的依賴。

馬雲 從不認為自己是首富 我沒有時間花錢

程式設計驛站 wwwwww.cppcns.com.cppcns.com 9 月 21 日訊息 adgwnb此前,馬雲在參加某個會議的時候,表示自己後悔創程式設計客棧辦了阿里巴巴集團,由此誕生了 悔創阿里傑克馬 的綽號。近日,馬雲在接受外媒採訪時再出金句,稱不認為自己是首富並且沒有時間花錢。近日,馬雲...

微軟副總裁張亞勤 我不認為微軟是美國公司

2007年10月09日 16 57 00 微軟每年至少有一半收入來自美國之外。微軟的文化也具有多元性,人才來自世界各地。關於微軟在中美兩國利潤的具體百分比我沒有算過,但是現在我們的研究都是開放性的,我們是服務於全球的。陳永正的閃電離職在引發紛揚討論的同時,也留給人們無限想象,微軟的中國之路會走向何方...

我該如何寫單元測試?

在我的團隊中,單元測試是較難推行的敏捷實踐之一,我思考後覺得有以下原因 1 主觀上覺得會加大工作量,影響進度 2 從未接觸junit等單元測試框架,害怕接觸新事物 3 團隊形式上要求 形式上開展,但是未能結合培訓 code review等方式持續推行 其實單元測試是個相當簡單的技術,當然,要做的完美...