最近我寫了一些文章,關于 Java 程序員今年應該學習什么,例如編程語言,庫和框架等,如果只能學習或提高其中一項,那必然是自動化測試技能。
測試是專業(yè)程序員區(qū)別于業(yè)余程序員的一項指標,作為專業(yè)程序員,并非必須采用 TDD,BDD 或其它測試方法論,但最低標準是通過編寫代碼的方式,來自動化測試自己的代碼。
許多 Java 程序員編寫單元測試和集成測試,使用 Jenkins、TeamCity 等持續(xù)集成工具,在構建階段自動運行。
如果還有人對程序員是否應該關注自動化測試存有疑問,那么讓我來回答,隨著 DevOps 理念的增強和角色的涌現(xiàn),自動化測試的重要性正在呈指數(shù)型增長。
企業(yè)通常青睞那種擅長編寫單元測試的程序員,這些程序員對各種單元測試框架、庫和工具有著豐富的知識,比如 JUnit,Selenium,REST-Assured,Spock 框架等。
作為 Java 程序員,我們在截然不同的領域工作,從編寫 Java 核心代碼到 JSP 頁面,REST API,甚至有時為了構建自動化而去編寫 Groovy 腳本,這就要求我們必需了解不同的自動化測試工具。
舉一個例子,很長一段時間內,我只了解 JUnit,但當不得不測試 JSP 頁面時,我卻束手無策,直到我找到了 Selenium。REST Assured 是另一個類似的例子,我通常使用 curl 命令測試 REST API,但 REST Assured 將 REST API 的單元測試水平提升到了另一個層次。
Java 程序員需要用到十大單元測試和自動化集成測試工具
我認為一個優(yōu)秀的程序員,必然能夠很好地利用手頭上的工具,因此我總在業(yè)余時間學習和探索新的工具和庫,以下列表是我部分研究成果。
在這篇文章中,我將分享 10 個最為優(yōu)秀且必不可少的工具,框架和庫,這些可以幫助 java 程序員在各類 java 項目中編寫單元測試和集成測試。
JUnit
JUnit 無須贅述,即便是初級Java程序員,可能也已經聽說過它,你可以使用它編寫 Java 代碼的單元測試。
幾乎所有主流 IDE,例如 Eclipse,NetBeans 和 IntelliJ,都集成了 JUnit,可以直接在這些IDE中編寫和運行單元測試。
大多數(shù)人仍在使用 JUnit 4,即使 JUnit 5 已經發(fā)布,它很可能是今年下一個熱點。通過 JUnit 5,可以將 JUnit 同時應用于單元測試和集成測試,并且它還支持 Java 8 的特性。
REST Assured
用 Java 語言測試和驗證 REST 服務,要難于 Groovy 這類動態(tài)語言。
REST Assured 將這類語言的易用性帶入了 Java 領域,是一個優(yōu)秀的 REST API 的集成測試工具。
Selenium
Selenium 很可能是最流行的 Java UI 測試工具了,它可以讓你在不必啟動瀏覽器的情況下測試 JSP 頁面。
你可以使用 JUnit 和 Selenium 來測試 Web 程序的界面,它甚至允許你編寫 Web 應用程序的驗收測試。
TestNG
TestNG 是一個測試框架,其靈感來自 JUnit 和 NUnit,但同時引入了一些新的功能,使其功能更強大,使用更方便。例如可以使用注解,在任意大的線程池中,配置各種可用策略進行測試(例如所有方法都在自己的線程中,每一個測試類使用一個線程等)。
因為 TestNG 使用 JUnit 4 的注解,同時又集成了 HAMCSTREST 匹配器,它與 JUnit 的差異已經減小了,但兩者如何選擇,這取決于你。
Mockito
Java 類有許多 Mock 框架,例如 PowerMock 和 JMock,但我個人偏向于 Mockito,因為它有簡單的 API,優(yōu)秀的文檔以及大量的示例。
Mocking 是現(xiàn)代單元測試的一項關鍵技術,因為它允許你在沒有任何依賴的情況下獨立測試代碼,這就是為什么我鼓勵每個 Java 程序員在學習 JUnit 的同時,一起學習 Mocking 框架的原因。
我最喜歡的 mocking 框架是 Mockito,但如果你愿意,也可以研究下 PowerMock 或 JMock。
Spock框架
Spock 是另一個測試和規(guī)范框架,用于 Java 和 Groovy 應用程序。由于使用 Groovy 編寫,Spock 成為一種兼具豐富表現(xiàn)力且簡明扼要的規(guī)范語言。
當你使用 Spock 時,你的測試將變得更容易閱讀和維護,這得益于它采用的 JUnit 運行器,Spock 兼容大部分 IDE,構建工具和持續(xù)集成服務器。
可惜我沒有找到有助于學習 Spock 框架的課程,但閱讀《Java Testing with Spock》這本書是很好的開始。
Cucumber
Cucumber 是另一個重要的自動化集成測試工具,但與其它同類別的工具不同的是它能夠針對規(guī)格文檔進行自動化測試。
Cucumber 將規(guī)格文檔和測試文檔合成整個動態(tài)文檔,同時 Cucumber 自動測試這個文檔,使測試規(guī)范始終保持在最新版本。
Spring Test
Spring MVC 自帶一個很有用的測試框架,它可以在不引入 Web 容器的情況下進行深入測試。
Spring Test 是為 Spring 程序編寫自動化測試的最有用的庫之一。為了給 Spring 驅動的應用程序(包括 MVC 控制器在內),編寫單元測試和集成測試,Spring Test 提供了一流的支持。
另外,Spring Test DbUnit 集成了 Spring Test 框架與 DbUnit;Spring Test MVC HtmlUnit 集成了Spring Test MVC 框架和 HtmlUnit。
通過使用這些工具,你可以輕松地自動測試 Spring MVC 應用程序。
DBUnit
數(shù)據(jù)庫是許多 Java 應用程序,包括核心 Java 和 Web 應用程序中不可或缺的部分,也有可能是單元測試的最大障礙。
在進行集成測試時,連接開發(fā)環(huán)境或用戶驗收測試的數(shù)據(jù)庫并不可靠,因為任何人都可以更改數(shù)據(jù)模式和數(shù)據(jù)本身,例如表和存儲過程等,這會導致自動化集成測試失敗。
DbUnit 是一個 JUnit 擴展,每次集成測試前,將數(shù)據(jù)庫初始化成已知狀態(tài),確保數(shù)據(jù)庫存儲正確的數(shù)據(jù)。
DbUnit 自身還存在著一些問題,但它是一個非常有用的工具,因為它可以幫助我們分離測試數(shù)據(jù)與測試代碼。
Robot 框架
Robot 框架是一個基于 Python 的通用測試自動化框架,用于驗收測試和驗收測試驅動開發(fā)。
它是一個由關鍵字驅動的,使用表格測試數(shù)據(jù)語法的測試框架,可以用來測試那些涉及多種技術和接口的分布式異構應用。
如果你打算學習這個優(yōu)秀的集成測試框架,那么你可以從 Udemy 上的《Robot 框架測試自動化》的課程開始,這是一個很好的學習資源。
該課程涵蓋了兩部分內容,Robot 框架基礎和高級特性。
結論
以上列舉了Java 程序員需要用到的單元測試和集成測試工具,框架和庫。
還有很多庫沒有包括在這個列表中,例如 AssertJ 和 Hamcrest,它們可以幫助你寫出漂亮且流暢的測試,但學習需要一步步來。
首先,學習一個可以應用于日常工作的工具或庫。 例如,如果你正在使用 Java UI,那么首先應該學習 Selenium,這樣你可以有更多時間專注在這個工具上。
同樣的,如果你的工作內容是 REST API,請學習 REST Assured(參閱 REST with Spring);如果你正在做很多核心 Java 的工作,那么 JUnit 5 可能是你首先需要關注的庫。