代碼檢查又一利器:ArchUnit

Code Review總是讓人又愛又恨,它可以幫助我們在提測之前發(fā)現(xiàn)很多代碼中比較“丟人”的問題蜈七,但是秒拔,Code Review通常會比寫代碼更加耗費精力,因為你需要理解別人的代碼,而為了這一目的砂缩,往往需要很多次的溝通作谚。

人們常說“見字如面”。我認為代碼也是一樣庵芭,看到一個人的代碼妹懒,就會對這個人有一個大概的印象。例如双吆,當你看到一段代碼寫的非常隨意眨唬,隨意的格式、隨意的命名好乐、隨意的封裝匾竿,然后又沒有單元測試,那我們一般會認為這段代碼的作者是一個不夠嚴謹蔚万、做事隨意岭妖、有些懶惰,又對自己的代碼責任心不強的人反璃。如果你不是這樣的人昵慌,那就需要花費更多的力氣向同事證明自己。而如果在代碼中做好每一個細節(jié)淮蜈,嚴格遵循編碼規(guī)范斋攀,單元測試覆蓋率比較高,那么同事對你的第一印象一定是這個人還是比較可靠的梧田,跟他合作應該比較愉快淳蔼。

說了這么多,其實就是想強調Code Review的重要性柿扣。那么既然它這么重要,但又給我們帶來了更大的工作量闺魏。作為程序員未状,我們一定會想,能不能自動化析桥?答案當然是可以司草。事實上現(xiàn)在也有很多公司實現(xiàn)了自動化,例如自動進行靜態(tài)代碼分析來確保代碼質量泡仗,利用類似Cobertura這樣的工具來檢查單元測試覆蓋程度等等埋虹。但是這并不能完全保證代碼的整潔性和可靠性。

有了這些工具之后Code Review輕松了許多娩怎,但是這些工具的安裝搔课、使用也是需要花費很高的成本的。所以我想給大家介紹的是一個使用簡單截亦、方便的工具來幫我完成這些任務爬泥。在介紹之前柬讨,我們先來想一想我們平時在Review別人代碼時可能會注意哪些問題。這里我簡單列出來了一些:

  • 拋出的異常不能太過廣泛
  • 不能寫System.out袍啡,而是要用日志輸出
  • 不能使用java.util.logging
  • 如果使用貧血模型開發(fā)踩官,每個類需要放到對應的包中
  • 接口不能放在實現(xiàn)類的包中
  • Service層代碼不能訪問Controller層代碼
  • 合理使用第三方庫

這些事情以前我們都是靠人工來檢查,直到我發(fā)現(xiàn)了ArchUnit這個庫境输。感覺像是抓住了自動化道路上的救命稻草蔗牡。

什么是ArchUnit?

ArchUnit的官方網(wǎng)站是 https://www.archunit.org

官網(wǎng)中原話介紹是

ArchUnit is a free, simple and extensible library for checking the architecture of your Java code using any plain Java unit test framework.

意思是ArchUnit是一款免費嗅剖、簡單可擴展的庫辩越,它可以使用任何Java單元測試框架來檢查Java代碼的架構。

也就是說窗悯,它的主要功能是用來檢查代碼結構的区匣。那么怎么使用呢?

如何使用蒋院?

ArchUnit的簡單絕對不是空談亏钩,如果你是maven項目,只需要在pom.xml文件中添加如下依賴:

<dependency>
    <groupId>com.tngtech.archunit</groupId>
    <artifactId>archunit</artifactId>
    <version>0.12.0</version>
    <scope>test</scope>
</dependency>

如果你是Gradle項目欺旧,使用起來同樣非常簡單

dependencies {
    testCompile 'com.tngtech.archunit:archunit:0.8.0'
}

當你添加了依賴以后姑丑,就可以為我們前面提到的規(guī)則寫測試用例了。

當然辞友,也有一些內建的通用規(guī)則栅哀,它們定義在

com.tngtech.archunit.library.GeneralCodingRules

這個類中。關于內建規(guī)則的細節(jié)称龙,可以查看官方文檔留拾。

自定義規(guī)則

除了內建規(guī)則以外,ArchUnit也支持你定義自己需要的規(guī)則鲫尊,至于如何定義規(guī)則痴柔,文檔中都有詳細的介紹。當然疫向,也可以參考這個例子來寫一些規(guī)則咳蔚。 https://github.com/TNG/ArchUnit-Examples

如何執(zhí)行

規(guī)則定義好以后如何執(zhí)行呢?我們說ArchUnit使用起來非常簡單搔驼,如果需要測試谈火,對maven項目來說只需要執(zhí)行命令

mvn test

而對于Gradle項目來說,只要執(zhí)行命令

gradle test

總結

ArchUnit看起來是一個很酷的三方庫舌涨,我并沒有在使用層面做過多介紹糯耍,因為我也在摸索中,感興趣的朋友可以和我一起交流。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末谍肤,一起剝皮案震驚了整個濱河市啦租,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荒揣,老刑警劉巖篷角,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異系任,居然都是意外死亡恳蹲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門俩滥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嘉蕾,“玉大人,你說我怎么就攤上這事霜旧〈沓溃” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵挂据,是天一觀的道長以清。 經(jīng)常有香客問我,道長崎逃,這世上最難降的妖魔是什么掷倔? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮个绍,結果婚禮上勒葱,老公的妹妹穿的比我還像新娘。我一直安慰自己巴柿,他們只是感情好凛虽,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著广恢,像睡著了一般凯旋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上袁波,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天瓦阐,我揣著相機與錄音蜗侈,去河邊找鬼篷牌。 笑死,一個胖子當著我的面吹牛踏幻,可吹牛的內容都是我干的枷颊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼夭苗!你這毒婦竟也來了信卡?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤题造,失蹤者是張志新(化名)和其女友劉穎傍菇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體界赔,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡丢习,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了淮悼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咐低。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖袜腥,靈堂內的尸體忽然破棺而出见擦,到底是詐尸還是另有隱情,我是刑警寧澤羹令,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布鲤屡,位于F島的核電站,受9級特大地震影響特恬,放射性物質發(fā)生泄漏执俩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一癌刽、第九天 我趴在偏房一處隱蔽的房頂上張望役首。 院中可真熱鬧,春花似錦显拜、人聲如沸衡奥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矮固。三九已至,卻和暖如春譬淳,著一層夾襖步出監(jiān)牢的瞬間档址,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工邻梆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留守伸,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓浦妄,卻偏偏與公主長得像尼摹,于是被迫代替她去往敵國和親见芹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容

  • 今天心情很煩躁蠢涝,不知道是生理期將近還是想著自己計劃的學習沒有完成目標玄呛,心情很焦躁。午睡哄睡倆小時依舊沒有入睡的意思...
    給給閱讀 145評論 1 0
  • This place is dead. 這地方死氣沉沉的 1.The city center's quite li...
    有烏云閱讀 329評論 0 0
  • 今天是六一兒童節(jié),還是沒有忍住祝自己兒童節(jié)快樂》峄看到閨密曬了男朋友送她的禮物,還在洗澡的時候聽了閨密抱怨自己的男朋...
    不是仙女的仙女帆閱讀 258評論 0 0
  • #昆明花卉游學第一天# 這一天的行程挺滿庭砍,昨天睡足了就等著今天好好逛的呢! 早晨集中的時間是9:40混埠,陸續(xù)有遲到的...
    啡常識閱讀 259評論 0 0