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