JAVA 程式設計師需要用到 10 個測試框架和庫

搬磚大師傅發表於2018-05-14

想要提高你的自動化測試技術?以下是 10 個優秀的測試框架和庫,以及它們常見用法的概述。

最近我寫了一些文章,關於 Java 程式設計師今年應該學習什麼,例如程式語言,庫和框架等,如果只能學習或提高其中一項,那必然是自動化測試技能。

測試是專業程式設計師區別於業餘程式設計師的一項指標,作為專業程式設計師,並非必須採用 TDD,BDD 或其它測試方法論,但最低標準是通過編寫程式碼的方式,來自動化測試自己的程式碼。

許多 Java 程式設計師編寫單元測試和整合測試,使用 Jenkins、TeamCity 等持續整合工具,在構建階段自動執行。

如果還有人對程式設計師是否應該關注自動化測試存有疑問,那麼讓我來回答,隨著 DevOps 理念的增強和角色的湧現,自動化測試的重要性正在呈指數型增長。

企業通常青睞那種擅長編寫單元測試的程式設計師,這些程式設計師對各種單元測試框架、庫和工具有著豐富的知識,比如 JUnit,Selenium,REST-Assured,Spock 框架等。

作為 Java 程式設計師,我們在截然不同的領域工作,從編寫 Java 核心程式碼到 JSP 頁面,REST API,甚至有時為了構建自動化而去編寫 Groovy 指令碼,這就要求我們必需瞭解不同的自動化測試工具。

舉一個例子,很長一段時間內,我只瞭解 JUnit,但當不得不測試 JSP 頁面時,我卻束手無策,直到我找到了 Selenium。REST Assured 是另一個類似的例子,我通常使用 curl 命令測試 REST API,但 REST Assured 將 REST API 的單元測試水平提升到了另一個層次。

Java 程式設計師需要用到十大單元測試和自動化整合測試工具

我認為一個優秀的程式設計師,必然能夠很好地利用手頭上的工具,因此我總在業餘時間學習和探索新的工具和庫,以下列表是我部分研究成果。

在這篇文章中,我將分享 10 個最為優秀且必不可少的工具,框架和庫,這些可以幫助 java 程式設計師在各類 java 專案中編寫單元測試和整合測試。

JUnit

JUnit 無須贅述,即便是初級Java程式設計師,可能也已經聽說過它,你可以使用它編寫 Java 程式碼的單元測試。

幾乎所有主流 IDE,例如 Eclipse,NetBeans 和 IntelliJ,都整合了 JUnit,可以直接在這些IDE中編寫和執行單元測試。

大多數人仍在使用 JUnit 4,即使 JUnit 5 已經發布,它很可能是今年下一個熱點。通過 JUnit 5,可以將 JUnit 同時應用於單元測試和整合測試,並且它還支援 Java 8 的特性。

junit5 architecture testing

REST Assured

用 Java 語言測試和驗證 REST 服務,要難於 Groovy 這類動態語言。

REST Assured 將這類語言的易用性帶入了 Java 領域,是一個優秀的 REST API 的整合測試工具。

REST assured testing Restful web application

Selenium

Selenium 很可能是最流行的 Java UI 測試工具了,它可以讓你在不必啟動瀏覽器的情況下測試 JSP 頁面。

你可以使用 JUnit 和 Selenium 來測試 Web 程式的介面,它甚至允許你編寫 Web 應用程式的驗收測試。

selenium-webdriver-with-java-basics-advance-archit

TestNG

TestNG 是一個測試框架,其靈感來自 JUnit 和 NUnit,但同時引入了一些新的功能,使其功能更強大,使用更方便。例如可以使用註解,在任意大的執行緒池中,配置各種可用策略進行測試(例如所有方法都在自己的執行緒中,每一個測試類使用一個執行緒等)。

因為 TestNG 使用 JUnit 4 的註解,同時又整合了 HAMCSTREST 匹配器,它與 JUnit 的差異已經減小了,但兩者如何選擇,這取決於你。

TestNG framework

Mockito

Java 類有許多 Mock 框架,例如 PowerMock 和 JMock,但我個人偏向於 Mockito,因為它有簡單的 API,優秀的文件以及大量的示例。

Mocking 是現代單元測試的一項關鍵技術,因為它允許你在沒有任何依賴的情況下獨立測試程式碼,這就是為什麼我鼓勵每個 Java 程式設計師在學習 JUnit 的同時,一起學習 Mocking 框架的原因。

我最喜歡的 mocking 框架是 Mockito,但如果你願意,也可以研究下 PowerMock 或 JMock。

Spock框架

Spock 是另一個測試和規範框架,用於 Java 和 Groovy 應用程式。由於使用 Groovy 編寫,Spock 成為一種兼具豐富表現力且簡明扼要的規範語言。

當你使用 Spock 時,你的測試將變得更容易閱讀和維護,這得益於它採用的 JUnit 執行器,Spock 相容大部分 IDE,構建工具和持續整合伺服器。

可惜我沒有找到有助於學習 Spock 框架的課程,但閱讀《Java Testing with Spock》這本書是很好的開始。

Java Testing with Spock

Cucumber

Cucumber 是另一個重要的自動化整合測試工具,但與其它同類別的工具不同的是它能夠針對規格文件進行自動化測試。

Cucumber 將規格文件和測試文件合成整個動態文件,同時 Cucumber 自動測試這個文件,使測試規範始終保持在最新版本。

Cucumber testing framework 2

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

資料庫是許多 Java 應用程式,包括核心 Java 和 Web 應用程式中不可或缺的部分,也有可能是單元測試的最大障礙。

在進行整合測試時,連線開發環境或使用者驗收測試的資料庫並不可靠,因為任何人都可以更改資料模式和資料本身,例如表和儲存過程等,這會導致自動化整合測試失敗。

DbUnit 是一個 JUnit 擴充套件,每次整合測試前,將資料庫初始化成已知狀態,確保資料庫儲存正確的資料。

DbUnit 自身還存在著一些問題,但它是一個非常有用的工具,因為它可以幫助我們分離測試資料與測試程式碼。

Unit testing of database using DBUnit

Robot 框架

Robot 框架是一個基於 Python 的通用測試自動化框架,用於驗收測試和驗收測試驅動開發。

它是一個由關鍵字驅動的,使用表格測試資料語法的測試框架,可以用來測試那些涉及多種技術和介面的分散式異構應用。

如果你打算學習這個優秀的整合測試框架,那麼你可以從 Udemy 上的《Robot 框架測試自動化》的課程開始,這是一個很好的學習資源。

該課程涵蓋了兩部分內容,Robot 框架基礎和高階特性。

accept test report using robot framework

結論

以上列舉了Java 程式設計師需要用到的單元測試和整合測試工具,框架和庫。

還有很多庫沒有包括在這個列表中,例如 AssertJ 和 Hamcrest,它們可以幫助你寫出漂亮且流暢的測試,但學習需要一步步來。

首先,學習一個可以應用於日常工作的工具或庫。 例如,如果你正在使用 Java UI,那麼首先應該學習 Selenium,這樣你可以有更多時間專注在這個工具上。

同樣的,如果你的工作內容是 REST API,請學習 REST Assured(參閱 REST with Spring);如果你正在做很多核心 Java 的工作,那麼 JUnit 5 可能是你首先需要關注的庫。

相關文章