面向Java開發人員的十種測試框架庫
譯文【51CTO.com快譯】引言:您想提升自己的自動化測試能力嗎?這里為您提供了10款優秀的測試框架庫,以及它們的***用例。
測試能力可謂是鑒別專業開發人員與業余新手的利器。它不僅體現在是否能遵循TDD(Test-Driven Development,測試驅動開發)、BDD(Behavior-Driven Development,行為驅動開發)或其他任何測試方法,而且反映了您是否具有編寫出能夠自動測試軟件代碼的能力。
如今,許多Java開發人員主要通過使用持續集成的工具(如Jenkins或TeamCity),編寫出會在構建時就能自動運行的各種單元與集成測試程序。
如果在您的身邊還有人對于“程序員為何應該關注自動化測試”存有疑問的話,那么可以告訴他:隨著DevOps的出現和對它認識的加深,業界對于自動化測試的重要性也在呈指數式增長中。
對于一般公司而言,通常會更傾慕那些擅長編寫單元測試的程序員們。因為他們熟悉各種單元測試的框架庫與工具,例如JUnit,Selenium,REST-Assured,Spock框架等。
作為一名Java開發人員,我們經常會涉及到一些截然不同的領域,例如:編寫核心的Java代碼、創建JSP頁面、編寫REST APIs、有時甚至會為了自動化的構建而創建一些Groovy腳本。這也是為什么我們還需要了解如何運用不同的工具來進行自動化測試的原因。
比如說:倘若我長期只知道使用JUnit,但是突然必須要測試JSP頁面時,我會完全沒有方向,更想不到要去尋找Selenium這樣的工具。同樣對于REST Assured來說,由于我通常會使用curl命令去測試自己的REST API,殊不知REST Assured會將REST API的單元測試帶到另一個層次上。
面向Java程序員的十種單元與集成測試工具
工欲善其事,必先利其器。我一直認為這句話對于程序員也是適用的。因此,我經常會在閑暇的時候去發掘、嘗試、學習和探索一些新的工具和各種庫,下面我將列出自己所收集到的一些工具。
本文所提及到的十種優秀的基礎工具、框架和庫,都有助于Java開發人員根據各自手頭的項目,編寫出各種單元與集成測試。
1.JUnit
我不認為我需要對Junit做任何介紹。即使您是Java編程的初學者,也一定聽說過它的大名。它可以讓您為Java代碼編寫出相應的單元測試程序。
幾乎所有的主流集成開發環境(IDE),如Eclipse,NetBeans和IntelliJ都提供了對Junit的集成,這就意味著您可以在這些IDE環境中寫入并運行單元測試。
雖然JUnit 5如今已經發布了,但是大多數人至今仍然在使用JUnit 4。不過今年可能會有下一個版本面世。您可以將JUnit用于單元與集成測試,它還能夠支持Java 8的各種功能。
2.REST Assured
在Java中測試和驗證各種REST服務,要比諸如Groovy之類的動態語言難得多。
REST Assured則給Java領域帶來了語言上的簡便性。它是一種十分優秀的REST API集成測試工具。
3.Selenium
Selenium應該是Java UI測試中最為普遍的工具了,它允許您測試JSP頁面,而無需在瀏覽器中啟動這些頁面。
您可以使用JUnit和Selenium來測試自己的Web應用程序的UI。它甚至允許您去編寫Web應用,以驗收各種測試。
4.TestNG
TestNG是一種由JUnit和NUnit發展而來的測試框架,不過它引入了許多新的功能,而且更為易用。例如:annotations(請見http://javarevisited.blogspot.hk/2012/06/junit4-annotations-test-examples-and.html#axzz56lq0jrxn)可以讓您在任意大的線程池中,運行各種可用策略的測試(將所有方法都放在自己的線程之中,每個線程對應一個測試類)。
通過使用JUnit 4中的annotations,可以彌補JUnit和TestNG之間的差距。另外只要您愿意,還可以去整合Hamcrest的匹配器。
5.Mockito
在Java的類庫中,有著許多諸如PowerMock和JMock的mocking(模擬)框架。我個人比較喜歡Mockito,因為它有著簡單的API,完善的文檔和大量的示例。
Mocking是如今單元測試的一種關鍵技術,它允許您在沒有任何依賴性的情況下,獨立地測試自己的代碼,這也就是為什么我鼓勵每個Java開發人員在學習Junit時一并掌握mocking框架的原因。
雖然我力推Mockito,這一mocking框架。當然如果您有興趣,也可以去試試PowerMock或JMock。
6.Spock Framework
Spock是針對Java和Groovy應用的另一種測試和規范框架。它是由Groovy編寫的,因此具有很強的表達性,而且是一種極其規范的語言。
通過使用Spock,您的測試程序會變得更加易讀、且容易維護。受益于Junit的運行程序,Spock能夠與大多數IDE、構建工具、以及持續集成類型的服務器相兼容。
可惜的是,我沒能在網上找到任何有關Spock框架的學習課程。當然您可以通過《使用Spock進行Java測試》(https://www.amazon.com/Java-Testing-Spock-Konstantinos-Kapelonis/dp/1617292532/ref=as_at?creativeASIN=1617292532&linkCode=w61&imprToken=MfCu8SgYHitGBTnYpPUhiw&slotNum=0&tag=javamysqlanta-20)一書來作為上手的***步資料。
7.Cucumber
Cucumber是自動化集成測試的另一種常用工具,它與其他同類工具的不同之處是其規范能力。
Cucumber將規范和測試文檔合并為一個可被Cucumber自動測試的整體,從而保證了您的規范文檔一直是***的。
8.Spring Test
Spring MVC是一種非常有用的測試框架,它可以在不涉及Web容器的情況下,進行深層次的測試。
對于編寫針對Spring應用的自動化測試來說,它是一種非常有用的庫。如果您想對包括MVC控制器在內的基于Spring的應用,進行單元與集成測試的話,它能夠提供***的支持。
還有一種Spring Test DbUnit,它是將具有DbUnit的Spring Test框架和具有HtmlUnit的Spring Test MVC集成在了一起。
通過使用上述這些工具,您可以輕松地以自動化的方式去測試各種Spring MVC應用程序。
9.DBUnit
通常,數據庫是許多Java應用程序(包括核心Java和Web應用)不可或缺的組成部分,當然它可能也是單元測試中的***障礙。由于任何人都可以去更改數據、模式(schema)、表、甚至是存儲過程,因此連接到Dev或UAT數據庫上進行集成測試往往是不可靠的,而且很容易導致自動化集成測試的失敗。
DbUnit是JUnit的一個擴展,它可以被用于在每次集成測試之前,將數據庫初始化為一種已知的狀態,以確保數據庫包含著正確的數據。
DbUnit雖然也有其自身的問題,但是它能夠幫助我們將創建測試數據從測試代碼里分離出來,所以它仍是一款非常實用的工具。
10.Robot Framework
Robot Framework是一種通用的基于Python的測試自動化框架,它可以被用于驗收測試和測試驅動的開發。
它是一種將表格測試數據作為語法、以關鍵字作為驅動的測試框架。您可以使用它來測試分布式的異構應用程序,其中驗證部分需要涉及到多種技術與接口。
如果您想學習該集成測試框架,那么可以將Udemy網站的Robot Framework測試自動化(https://www.udemy.com/robot-framework-level-1/?siteID=JVFxdTr9V80-V8cQwgaw3imzy3q58cwXSQ&LSNPUBID=JVFxdTr9V80)作為一個很好的開端。這是一個涵蓋了Robot framework基本與高級功能的兩部分課程。
結論
上述就是面向Java開發人員的一些基本性的單元與集成測試的工具、框架庫。
當然還有一些我尚未列舉到的庫,例如AssertJ和Hamcrest。只要您愿意花時間去研究,它們都可以幫助您寫出***且流暢的測試代碼。
我的經驗是:您可以找一種在您的日常工作中經常會接觸到的工具或庫,然后開始學習。例如:倘若您正在使用Java UI,就應該首先學習Selenium,因為您會更為廣泛和深入地使用到該工具。同樣,如果您正在使用REST APIs,就請先學習REST Assured,并請參閱REST with Spring(http://www.baeldung.com/rest-with-spring-course?utm_source=javarevisited&utm_medium=web&utm_campaign=rws&affcode=22136_bkwjs9xa)。如果您經常接觸核心的Java工作,那么您可能需要先開始學習JUnit 5庫了。
原文標題:Top 10 Testing Frameworks and Libraries for Java Developers,作者:Javin Paul
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】