測試能力可謂是鑒別專業(yè)開發(fā)人員與業(yè)余新手的利器。它不僅體現(xiàn)在是否能遵循TDD(Test-Driven Development,測試驅動開發(fā))、BDD(Behavior-Driven Development,行為驅動開發(fā))或其他任何測試方法,而且反映了您是否具有編寫出能夠自動測試軟件代碼的能力。
如今,許多Java開發(fā)人員主要通過使用持續(xù)集成的工具(如Jenkins或TeamCity),編寫出會在構建時就能自動運行的各種單元與集成測試程序。
如果在您的身邊還有人對于“程序員為何應該關注自動化測試”存有疑問的話,那么可以告訴他:隨著DevOps的出現(xiàn)和對它認識的加深,業(yè)界對于自動化測試的重要性也在呈指數(shù)式增長中。
對于一般公司而言,通常會更傾慕那些擅長編寫單元測試的程序員們。因為他們熟悉各種單元測試的框架庫與工具,例如JUnit,Selenium,REST-Assured,Spock框架等。
作為一名Java開發(fā)人員,我們經(jīng)常會涉及到一些截然不同的領域,例如:編寫核心的Java代碼、創(chuàng)建JSP頁面、編寫REST APIs、有時甚至會為了自動化的構建而創(chuàng)建一些Groovy腳本。這也是為什么我們還需要了解如何運用不同的工具來進行自動化測試的原因。
比如說:倘若我長期只知道使用JUnit,但是突然必須要測試JSP頁面時,我會完全沒有方向,更想不到要去尋找Selenium這樣的工具。同樣對于REST Assured來說,由于我通常會使用curl命令去測試自己的REST API,殊不知REST Assured會將REST API的單元測試帶到另一個層次上。
面向Java程序員的十種單元與集成測試工具
工欲善其事,必先利其器。我一直認為這句話對于程序員也是適用的。因此,我經(jīng)常會在閑暇的時候去發(fā)掘、嘗試、學習和探索一些新的工具和各種庫,下面我將列出自己所收集到的一些工具。
本文所提及到的十種優(yōu)秀的基礎工具、框架和庫,都有助于Java開發(fā)人員根據(jù)各自手頭的項目,編寫出各種單元與集成測試。
1.JUnit
我不認為我需要對Junit做任何介紹。即使您是Java編程的初學者,也一定聽說過它的大名。它可以讓您為Java代碼編寫出相應的單元測試程序。
幾乎所有的主流集成開發(fā)環(huán)境(IDE),如Eclipse,NetBeans和IntelliJ都提供了對Junit的集成,這就意味著您可以在這些IDE環(huán)境中寫入并運行單元測試。
雖然JUnit 5如今已經(jīng)發(fā)布了,但是大多數(shù)人至今仍然在使用JUnit 4。不過今年可能會有下一個版本面世。您可以將JUnit用于單元與集成測試,它還能夠支持Java 8的各種功能。
2.REST Assured
在Java中測試和驗證各種REST服務,要比諸如Groovy之類的動態(tài)語言難得多。
REST Assured則給Java領域帶來了語言上的簡便性。它是一種十分優(yōu)秀的REST API集成測試工具。
3.Selenium
Selenium應該是Java UI測試中最為普遍的工具了,它允許您測試JSP頁面,而無需在瀏覽器中啟動這些頁面。
您可以使用JUnit和Selenium來測試自己的Web應用程序的UI。它甚至允許您去編寫Web應用,以驗收各種測試。
4.TestNG
TestNG是一種由JUnit和NUnit發(fā)展而來的測試框架,不過它引入了許多新的功能,而且更為易用。例如: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開發(fā)人員在學習Junit時一并掌握mocking框架的原因。
雖然我力推Mockito,這一mocking框架。當然如果您有興趣,也可以去試試PowerMock或JMock。
6.Spock Framework
Spock是針對Java和Groovy應用的另一種測試和規(guī)范框架。它是由Groovy編寫的,因此具有很強的表達性,而且是一種極其規(guī)范的語言。
通過使用Spock,您的測試程序會變得更加易讀、且容易維護。受益于Junit的運行程序,Spock能夠與大多數(shù)IDE、構建工具、以及持續(xù)集成類型的服務器相兼容。
可惜的是,我沒能在網(wǎng)上找到任何有關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是自動化集成測試的另一種常用工具,它與其他同類工具的不同之處是其規(guī)范能力。
Cucumber將規(guī)范和測試文檔合并為一個可被Cucumber自動測試的整體,從而保證了您的規(guī)范文檔一直是最新的。
8.Spring Test
Spring MVC是一種非常有用的測試框架,它可以在不涉及Web容器的情況下,進行深層次的測試。
對于編寫針對Spring應用的自動化測試來說,它是一種非常有用的庫。如果您想對包括MVC控制器在內的基于Spring的應用,進行單元與集成測試的話,它能夠提供一流的支持。
還有一種Spring Test DbUnit,它是將具有DbUnit的Spring Test框架和具有HtmlUnit的Spring Test MVC集成在了一起。
通過使用上述這些工具,您可以輕松地以自動化的方式去測試各種Spring MVC應用程序。
9.DBUnit
通常,數(shù)據(jù)庫是許多Java應用程序(包括核心Java和Web應用)不可或缺的組成部分,當然它可能也是單元測試中的最大障礙。由于任何人都可以去更改數(shù)據(jù)、模式(schema)、表、甚至是存儲過程,因此連接到Dev或UAT數(shù)據(jù)庫上進行集成測試往往是不可靠的,而且很容易導致自動化集成測試的失敗。
DbUnit是JUnit的一個擴展,它可以被用于在每次集成測試之前,將數(shù)據(jù)庫初始化為一種已知的狀態(tài),以確保數(shù)據(jù)庫包含著正確的數(shù)據(jù)。
DbUnit雖然也有其自身的問題,但是它能夠幫助我們將創(chuàng)建測試數(shù)據(jù)從測試代碼里分離出來,所以它仍是一款非常實用的工具。
10.Robot Framework
Robot Framework是一種通用的基于Python的測試自動化框架,它可以被用于驗收測試和測試驅動的開發(fā)。
它是一種將表格測試數(shù)據(jù)作為語法、以關鍵字作為驅動的測試框架。您可以使用它來測試分布式的異構應用程序,其中驗證部分需要涉及到多種技術與接口。
如果您想學習該集成測試框架,那么可以將Udemy網(wǎng)站的Robot Framework測試自動化(https://www.udemy.com/robot-framework-level-1/?siteID=JVFxdTr9V80-V8cQwgaw3imzy3q58cwXSQ&LSNPUBID=JVFxdTr9V80)作為一個很好的開端。這是一個涵蓋了Robot framework基本與高級功能的兩部分課程。
結論
上述就是面向Java開發(fā)人員的一些基本性的單元與集成測試的工具、框架庫。
當然還有一些我尚未列舉到的庫,例如AssertJ和Hamcrest。只要您愿意花時間去研究,它們都可以幫助您寫出完美且流暢的測試代碼。
評論