技术开发 频道

JUnit介绍及其快速使用

【IT168 技术文章】

  JUnit 是 Java 社区中知名度最高的单元测试工具。它诞生于 1997 年,由 Erich Gamma 和 Kent Beck 共同开发完成。其中 Erich Gamma 是经典著作《设计模式:可复用面向对象软件的基础》一书的作者之一,并在 Eclipse 中有很大的贡献;Kent Beck 则是一位极限编程(XP)方面的专家和先驱。

  麻雀虽小,五脏俱全。JUnit 设计的非常小巧,但是功能却非常强大。Martin Fowler 如此评价 JUnit:在软件开发领域,从来就没有如此少的代码起到了如此重要的作用。它大大简化了开发人员执行单元测试的难度,特别是 JUnit 4 使用 Java 5 中的注解(annotation)使测试变得更加简单。

  从推出到现在,JUnit3.8.1和JUnit4的工作原理和使用区别还是比较大的,下面首先用一段代码来演示JUnit3.8.1的快速使用,以便熟悉JUnit的原理
 
    1.首先,我们在Eclipse的项目中创建一个待测试的类Hello.java,代码如下:

public class Hello {

    public int abs(int num)
    {
        return num>0?num:-num;
    }
    public double division(int a,int b)
    {
        return a/b;
    }
}

  2.右击该类,选择 新建->JUnit测试用例,选择JUnit3.8.1,setUp和tearDown方法,点击下一步,选择需要测试的方法,JUnit会自动生成测试的代码框架,手动添加自己的测试代码后如下: 

import junit.framework.TestCase;

public class HelloTest extends TestCase {

    private Hello hello;
    public HelloTest()
    {
        super();
        System.out.println("a new test instance...");
    }
    //测试前JUnit会调用setUp()建立和初始化测试环境
    protected void setUp() throws Exception {
        super.setUp();                                    //注意:在Junit3.8.1中这里要调用父类的setUp()
        hello=new Hello();
        System.out.println("call before test...");
    }
    //测试完成后JUnit会调用tearDown()清理资源,如释放打开的文件,关闭数据库连接等等
    protected void tearDown() throws Exception {
        super.tearDown();                                //注意:在Junit3.8.1中这里要调用父类的tearDown()
        System.out.println("call after test... ");
    }

    //测试Hello类中的abs函数
    public void testAbs() {
        System.out.println("test the method abs()");
        assertEquals(16, hello.abs(16));
        assertEquals(11, hello.abs(-10));//在这里,会出现故障,应该把左边的参数改为10
        assertEquals(0, hello.abs(0));
       
    }

    //测试Hello类中的division函数
    public void testDivision() {
        System.out.println("test the method division()");
        assertEquals(3D, hello.division(6, 2));
        assertEquals(6D, hello.division(6, 1));
        assertEquals(0D, hello.division(6, 0));//在这里,会出现错误,java.lang.ArithmeticException: /by zero
       
    }

}

  3.运行该测试类,输出如下:

a new test instance...
a new test instance...
call before test...
test the method abs()
call after test...

call before test...
test the method division()
call after test...
  从上面的输出结果中,可以看出JUnit大概会生成如下的测试代码:

try {
    HelloTest test = new HelloTest();     // 建立测试类实例
    test.setUp();             // 初始化测试环境
    test.testAbs();             // 测试abs方法
    test.tearDown();             // 清理资源
}
catch(Exception e){}

try {
    HelloTest test = new HelloTest();     // 建立测试类实例
    test.setUp();             // 初始化测试环境
    test.testDivision();         // 测试division方法
    test.tearDown();             // 清理资源
}
catch(Exception e){}

  所以,每测试一个方法,JUnit就会创建一个xxxTest实例,如上面就分别生成了两个HelloTest实例来分别测试abs和division方法。

0
相关文章