测验才能可谓是辨别专业开发人员与业余新手的利器。它不只体现在是否能遵从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。只需您乐意花时间去研讨,它们都能够协助您写出完美且流通的测验代码。