Junit3和Junit4对比及Junit介绍

来源:互联网 发布:sql进阶教程 mick 编辑:程序博客网 时间:2024/05/16 04:30

JUnit测试工具使用手册

一、 简介

我们在编写大型程序的时候,需要写成千上万个方法或函数,有的函数是供其他开发人员调用或使用的,因此每编写完一个函数之后,都应该对这个函数的方方面面进行测试,确保该函数能够达到预期的功能要求,这样的测试我们称之为单元测试。

传统的编程方式,进行单元测试是一件很麻烦的事情,你要重新写另外一个程序,在该程序中调用你需要测试的方法,并且仔细观察运行结果,看看是否有错。正因为如此麻烦,所以程序员们编写单元测试的热情不是很高。于是JUnit应运而生,它大大简化了单元测试所要做的工作。

JUnit是一个开源的java单元测试框架。按照框架规定:编写的所有测试类,必须继承自junit.framework.TestCase类;里面的测试方法,命名应该以“test”开头,必须是public void 而且不能有参数;而且为了测试查错方便,尽量一个testXXX方法对一个功能单一的方法进行测试;使用assertEquals等junit.framework.TestCase中的断言方法来判断测试结果正确与否。

     JUnit中有两个基本对象TestCase和TestSuite。TestCase通过提供一组方法来实现一系列测试。其中,setup()方法用来在每项测试开始前建立测试所需的测试环境,而teardown()方法用来在测试后销毁该环境要创建测试程序,需要继承TestCase类,覆写setup和teardown方法,然后添加自己的测试函数,这些函数通常以“test方法名”的形式命名TestSuite是由几个TestCase或其他的TestSuite构成的你可以很容易的构成一个树形测试,每个测试都由另外一些测试的TestCase来构成被加入到TestSuite中的测试对象将在一个线程依次被执行。

二、 JUnit3JUnit4区别

Junit3:

1.测试类必须继承类TestCase;

2.测试方法必须以test开头;

Junit4:

1.测试类不需要继承TestCase;

2.测试方法命名没有特定要求,只要在待测方法前加上@Test即可;

3.通过@befroe替代setUp方法@After替代tearDown方法在一个测试类中,甚至可以使用多个@Before来注释多个方法,这些方法都是在每个测试之前运行。说明一点,@Before是在每个测试方法运行前均初始化一次,同理@After是在每个测试方法运行完毕后,均运行一次,也就是说,经这两个注释的初始化和注销,可以保证各个测试方法之间的独立性而互不干扰,的缺点是效率低。 在JUnit4中加入了一项新特性。加入了两个注释:@BeforeClass和@AfterClass,使用这两个注释的方法,在该测试类中,的测试方法之前、后各运行一次,而不是按照各个方法各运行一次。对于一些资源消耗大的项目,可以使用这两个注释。

4.此外Junit4还可以进行异常测试(@Test(expected=*.class) )和超时测试(@Test(timeout=xxx)),并且提供了一个新的assert方法:assertEquals(Object[] expected, Object[] actual),用于比较数组数据;

三、 JUnit常用assert方法

1.assertEquals ([String message],expected,actual):

     用来查看对象中存的值是否是期待的值,与字符串比较中使用的equals()方法类似;

    2.assertFalse ([String messag],boolean condition)

        assertTrue ([String messag],boolean condition):

     用来查看变量是是否为false或true,如果assertFalse()查看的变量的值是false则测试成功,如果是true则失败,assertTrue()与之相反;

     3.assertSame ([String message],expected,actual)

        assertNotSame ([Spring message],expected,actual):

       用来比较两个对象的引用是否相等和不相等,类似于通过“==”和“!=”比较两个对象;

  4.assertNull ([String message],java.lang.Object object)

       assertNotNull ([String message],java.lang.Object object):

     用来查看对象是否为空和不为空; 

  5.fail ([String message]):

     意为失败,用来抛出错误。fail()一旦被执行,会立即中止测试,java虚拟机不再执行任何别的代码,并且会抛出  junit.framework.AssertionFailedError错误! 

四、 JUnit3代码演示

      见操作。

五、 JUnit4代码演示

       见操作。

六、 JUnit使用总结

          JUnit是一个易用的,灵活的,开源的测试平台。就像所有其他项目一样,它有很多优点,但也有不足之处。通过使用无需人工干预的JUnit自动测试平台,我们很容易累积起大量的JUnit测试程序从而保证以往的bug不会重现。另外,JUnit便于和编译单元(如,Ant)以及IDE单元(如Eclipse)集成。

     JUnit的弱点也众所周知。它仅支持同步测试,而且不支持重现和其他异步单元。JUnit是一个黑箱测试平台,因此测试那些不会直接影响功能的bug(例如,内存泄漏)就非常困难。除此之外,它不支持易用的脚本语言,因此,想要使用JUnit就要懂得Java。

     JUnit的另一个不足是JUnit测试被限制于一个JVM之上。当要测试复杂或分布式场景的时候,这就变成个大问题。

     Pisces是一个开源项目,它扩展了JUnit平台,并且很好的解决了分布式场景的组合测试,像许多其他的扩展程序一样,Pisces添加了新功能的同时也保证了扩展前后JUnit操作的一致性。

Pisces的核心是在同一主机或不同主机上实现在远程JVM上运行JUnit测试的能力。

在每一个远端,我们运行一个Pisces代理程序,并指定唯一的代理名,每个代理都是一个Java应用程序,它根据从主测试程序接收的指令来运行JUnit测试,并将结果及默认输出返回到主测试单元。现在,一旦我们能运行一个包装在本地测试中的远程测试程序,我们就能通过组合几个这样的测试来创建一个更为复杂的场景。

七、   界面自动化测试

     AutoIt:是一个使用类似Basic脚本语言的软件,用于Windows GUI中进行自动化操作:它利用模拟键盘、鼠标移动来实现。

     JFCUnit 是一款在 JUnit 基础上针对 Swing GUI 扩展的单元测试工具。在同一个应用程序中,我们可以通过组件发现方法查找到组件,模拟用户动作触发组件事件来提供测试驱动,通过断言验证组件状态是否正确。

    AutoMan是淘宝测试team自主研发的包括自动化脚本编写框架,脚本执行,定时执行计划,报表分析,云测试环境管理等一体化自动化云测试平台。