自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

程序員必備的兩項基本技能

企業(yè)動態(tài)
Spring在“清算”EJB的時候,提出的一大罪狀就是:強迫開發(fā)者繼承它的類,依賴容器,難于單元測試。

 Spring在“清算”EJB的時候,提出的一大罪狀就是:強迫開發(fā)者繼承它的類,依賴容器,難于單元測試。

Spring的解決之道就是POJO,擺脫容器的控制,可以獨立創(chuàng)建和測試。即使是對SpringMVC這樣重度依賴容器的框架,Spring也提供了不需要Tomcat/Jetty運行,就可以對代碼進行單元測試的辦法: Mock。 

不僅僅是Spring, 你可以看看自己正在使用的語言和框架,是不是都有單元測試的支持?

Java就不用說了, Python 語言有unittest, Python寫的Django框架也有django.test, Ruby 和Ruby on Rails 有TestUnit, MiniTest。  ReactJS 有 Enzyme, Vue.js 有vue-test-utils......

為什么這么多大牛都把單元測試加入到語言和框架中來呢?  

答案很簡單,單元測試實在太重要了。

單元測試對于程序員來說,就是一個防護網(wǎng), 能讓你有信心開發(fā)新的特性而不破壞現(xiàn)有的實現(xiàn),與此同時,良好的單元測試,還能幫助別的程序員理解你的代碼。

尤其是對于動態(tài)類型語言做的大型項目,沒有單元測試,修改代碼是一件“可怕”的事情。

一個代碼單元(可能是一個類,或者是一組類) ,如果被充分地測試過,這個代碼單元通常有這樣的特點:  和別的模塊耦合度低,是面向接口編程(只有這樣才能實施Mock,才能測試),這樣的代碼就是好代碼。

對于一個有追求的團隊,對于一個想持續(xù)維護一個“正經(jīng)”應用的團隊,單元測試都是必備的。

同理,對于一個有追求的程序員,單元測試也是必備技能。 

可能有些人會說,我們的項目很復雜,沒有寫單元測試,項目也運行得很好??! 我想也許有這么幾種可能:

可能做的是一錘子買賣。

項目中已經(jīng)埋下了地雷,只是沒有發(fā)現(xiàn)。

在測試階段付出了巨大的代價,拼命加班,修改了無數(shù)的Bug。

當然,有些單元測試是不容易寫的, 最難搞的就是遺留代碼, 你得想辦法解耦才行,這方面有人專門寫了一本書,強烈推薦。

沒有人一次就把代碼寫得既正確又優(yōu)雅,如果你是這樣的人,請告訴我,我得拜你為師。 當然,我說的不是入門的Hello World,而是需要實現(xiàn)復雜的邏輯。  

通往優(yōu)雅代碼的路徑就是不斷地重構。 

類名,方法名,變量名能不能準確地表達意圖? 讓人一看就知道是怎么回事?

方法是不是太長, 各種邏輯交織在一起, 能不能提取出新的方法?

類的職責是不是劃分得不好,導致有些類過分臃腫? 

這個模塊如何進行擴展? 對外暴露的接口用起來怎么樣? 

......

強烈建議每個程序員寫完代碼以后,再審視一下,看看有沒有上面的問題。

如果有,那還愣著干什么, 趕緊改吧! 可是改動代碼破壞了功能怎么辦? 要是有單元測試就不怕了。 兜了一圈,又回到了單元測試!

重構要求在不破壞原有代碼的功能的情況下對代碼進行改動,讓它變得更好, 沒有單元測試是很難的。 

對于重構的具體技巧,我就不羅嗦了,  Martin Fowler已經(jīng)總結了一本書:

總之,單元測試和重構是程序員的兩項基本技能,他們和編程語言無關,如果你沒有掌握的話,很難說是一個合格的程序員。

【本文為51CTO專欄作者“劉欣”的原創(chuàng)稿件,轉載請通過作者微信公眾號coderising獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2011-03-14 10:56:56

程序員人才

2021-08-13 05:46:18

web程序員nodejs

2021-04-13 09:07:12

程序員工具軟件開發(fā)

2019-09-25 11:39:07

程序員編程技術

2013-06-13 14:29:26

架構師程序員

2020-10-14 08:32:08

算法遞歸面試

2010-05-17 17:00:25

MySQL兩項性能

2023-02-07 09:19:17

2019-06-23 17:37:58

Linux后端函數(shù)棧

2015-07-01 09:10:20

2024-01-08 16:27:20

2020-09-04 14:25:31

程序員網(wǎng)絡安全

2022-11-28 11:42:08

ReactJS開發(fā)Web 應用程序

2019-07-05 10:29:17

大數(shù)據(jù)數(shù)據(jù)科學家

2022-10-24 09:00:47

畫圖工具程序員XMind

2015-03-13 09:45:27

2009-06-25 09:33:43

Java API程序員

2009-04-14 11:13:22

主流開發(fā)開發(fā)技能程序員

2018-11-19 15:09:47

程序員大數(shù)據(jù)Devops

2023-10-04 00:50:00

Java開發(fā)
點贊
收藏

51CTO技術棧公眾號