知翼- 一站式内容服务平台,将内容、服务和工具深度结合,切入学习、工作场景,提供一站式全生命周期的内容服务
微信公众号
每一位接触java的程序员都需要安装相关的软件来帮助工作的顺利进行,比如java开发工具包、测试工具等,这是不可获缺的。java单元测试只会有两种结果,不是成功便是失败,再无第三种可能。进行单元测试可以有效的降低费用,发现错误可以及时更改,而非一条道走到黑。那么目前市面上常用的java测试工具有哪些?java单元测试时需要注意哪些问题呢?下面跟着福昕知翼一起来了解一下吧。Java测试工具1.ArquillianArquillian是JVM一个高度创新性和可扩展的测试平台,支持Java开发人员轻松创建自动化集合的,功能性的和验收的测试。Arquillian允许在运行时间执行测试。Arquillian可以用来管理单个或多个容器的生命周期,捆扎测试用例,从属类和资源。它还能够部署归档到容器中,在容器中执行测试、捕获结果,并创建报告。Arquillian集成了常见的测试框架,如JUnit 4、TestNG 5.并允许使用现有的IDE发布测试,并且由于其模块化的设计使得能够运行Ant和Maven测试插件。2.JTestJTest也被称为“Parasoft JTest”,是一款通过Parasoft制作的自动化的Java软件测试和静态分析软件。JTest包含的功能有:单元测试情况下的生成和执行、静态代码分析、数据流的静态分析、度量分析、回归测试、运行时错误检测。此外,它还具备了同行代码审查流程自动化和运行时错误检测的功能,如:竞态条件、异常、资源和内存泄漏、安全漏洞攻击。3.The Grinder“The Grinder”是一个Java负载测试框架,不但运行简单,而且其分布式测试采用了许多负载注入机器。只要有Java API,The Grinder就可以负载测试。这包括HTTP Web服务器、SOAP和REST Web服务器、应用程序服务器、以及用强大的Jython和Clojure语言写的包含了自定义协议的测试脚本。The Grinder的GUI控制台允许对多个负载注射器进行监测和控制,并自动管理客户端连接和cookies、SSL、代理感知和节流连接。The Grinder在BSD风格的开源许可下是免费的。4.TestNGTestNG是一款为Java编程语言设计的测试框架,灵感来自于JUnit和NUnit。 TestNG的主要功能是覆盖范围更广的测试分类,如单元、功能性、端到端,一体化等。它还有一些新的功能,可以使之更强大和更容易使用,如:注解、具备大型线程池各种策略的运行测试、多线程的代码测试、灵活的测试配置、参数化数据驱动的测试支持,等等。TestNG支持各种各样的工具和插件,比如Eclipse、IDEA、Maven等等。5.JUnit的JUnit是一个为Java编程语言设计的单元测试框架。 JUnit为测试驱动开发框架的发展发挥了重要作用。它是现在被统称为xUnit的单元测试框架大家庭的组成成员之一,源于SUnit。在编译时,JUnit可以连接作为JAR,用于编写可重复的测试。6.JWalkJWalk是一个为Java编程语言设计的单元测试工具包。它可支持被称为懒人系统单元测试的测试模式。JWalkTester工具能执行由程序员提供的编译过的任意Java类中的任何测试。通过静态和动态分析,以及提示后面的程序员,它能够使得测试符合惰性规范。7.MockitoMockito是一款在MIT License可用的支持Java的开源测试框架。Mockito允许程序员使用自动化的单元测试创建和测试双对象(模拟对象),以达到测试驱动开发(TDD)和行为驱动开发(BDD)的目的。8.PowermockPowerMock是一款支持单元测试源代码的Java框架。虽然PowerMock可以作为Mocking框架,例如Mockito和EasyMock的扩展而运行,但是它具备了更强大的能力。PowerMock利用自定义的类加载器和字节码操纵器,来确保静态方法的模拟、静态初始化的删除、函数构造、最终的类和方法以及私有方法。它的主要目的是通过最少的方法和注释来扩展现有的API,以获得额外的功能。它在开源Apache License 2.0条件下可用,也可以在Powermock Google Code site找到它.9.JemeterApache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。java单元测试的注意事项不要为了测试而牺牲设计单元测试和它要测试系统之间的关系是一个很常见的问题.所以先讨论这一点。当你写单元测试的时候,有时会被迫改变代码以适应测试。尤其是当你想测试一个私有方法或属性的时候。如果你把私有方法改为公有方法纯粹是出于测试的目的,那么不要这样做。测试意味着提升代码的质量,而不是降低。话是这么说,有时候设计系统的时候使其便于测试还是很必要的。如果你要加入一个设计支持测试,一定要保证它会增强系统的整体质量。如果不是这样,你只是为了测试才这么设计,那么我必须要强调,这很不好。例如,你有一个连接数据库的系统。如果你的系统连接测试数据库和正是开发数据库一样便利,那么这样很好。如果你把它设计成允许数据库可配置,这样方便了测试。同时你也加强了设计的质量,因为这样你的系统就更具有灵活性(你可以不用改变代码就连接到产品数据库上)。这种设计使系统和测试都受益,所以是个好决定。你的类只能通过工厂方法实例化。你需要测试一个类的对象,但出于某种原因,你无法调用工厂。它可能需要一些资源作为参数传入,但是你的测试环境中没有。那么是否能够将该类的默认构造方法改为公有,这样就可以在测试中实例化该类。这样做消减了系统设计的质量,允许任何人都可以访问这个构造方法。在这种情况下,程序员需要提供必需的资源,从工厂中实例化该类(可以通过使用Mock Object)。现在,讨论完这个问题,我们检查一些常见测试问题的解决方案。第一个问题是怎样具有测试不确定性的代码。为不确定性的代码编写具有统计性的测试有的代码具有不确定性。也就是说,影响一个方法的具体结果的因素并不仅限于此方法内的代码。System.currentTimeMillis()的返回值就是一个最简单的例子。确切的结果不是取决于代码而是底层的硬件。它返回的值是基于系统时钟,每次代码运行的时候都会有不同的返回结果。另一个例子是测试消息从服务端传送到浏览器的耗时。要构建一个可以预测的模型需要太多的变数。在细粒度层次上,网络是不确定的甚至是混乱的。然而,在细粒度层次上不可预测并不表明全面行为不可预测。如果你把大量的细粒结果收集起来,你可以得到对期望值得有效预测。例如,你的需求是90%的网络业务要在1/100秒钟完成。简单的方法是你可以反复运行代码,保存通过和失败的数目。如果90%失败了,那么测试液就失败了。java测试工具有哪些?java单元测试需注意哪些?上文中福昕知翼已经给出了答案。对于程序员来说java单元测试是非常重要的一个环节,编写单元测试也并不麻烦,而且还可以帮助程序员快速的发现代码是否有问题,如有问题可以迅速改过来,不会将问题堆积造成后期大量的修正工作。