面向Java开发人员的十种测试框架库

测试能力可谓是鉴别专业开发人员与业余新手的利器。它不仅体现在是否能遵循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的各种功能。

面向Java开发人员的十种测试框架库

2.REST Assured

在Java中测试和验证各种REST服务,要比诸如Groovy之类的动态语言难得多。

REST Assured则给Java领域带来了语言上的简便性。它是一种十分优秀的REST API集成测试工具。

面向Java开发人员的十种测试框架库

3.Selenium

Selenium应该是Java UI测试中最为普遍的工具了,它允许您测试JSP页面,而无需在浏览器中启动这些页面。

您可以使用JUnit和Selenium来测试自己的Web应用程序的UI。它甚至允许您去编写Web应用,以验收各种测试。

面向Java开发人员的十种测试框架库

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的匹配器。

面向Java开发人员的十种测试框架库

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)一书来作为上手的第一步资料。

面向Java开发人员的十种测试框架库

7.Cucumber

Cucumber是自动化集成测试的另一种常用工具,它与其他同类工具的不同之处是其规范能力。

Cucumber将规范和测试文档合并为一个可被Cucumber自动测试的整体,从而保证了您的规范文档一直是最新的。

面向Java开发人员的十种测试框架库

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虽然也有其自身的问题,但是它能够帮助我们将创建测试数据从测试代码里分离出来,所以它仍是一款非常实用的工具。

面向Java开发人员的十种测试框架库

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开发人员的十种测试框架库

结论

上述就是面向Java开发人员的一些基本性的单元与集成测试的工具、框架库。

当然还有一些我尚未列举到的库,例如AssertJ和Hamcrest。只要您愿意花时间去研究,它们都可以帮助您写出完美且流畅的测试代码。

相关推荐