在Eclipse中使用JUnit进行 单元测试

在Eclipse中使用JUnit进行

单元测试

 

 

目录

1.JUnit简介... 2

2.JUnit优点... 2

3.JUnit特性... 3

4.JUnit运用... 3

5.JUnit重要元素... 17

 

 

 

 

 

 

 

 

1.JUnit简介

JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。   

JUnit是由 Erich Gamma 和Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

 

2.JUnit优点

junit是在极限编程和重构(refactor)中被极力推荐使用的工具,因为在实现自动单元测试的情况下可以大大的提高开发的效率,但是实际上编写测试代码也是需要耗费很多的时间和精力的,那么使用这个东东好处到底在哪里呢?笔者认为是这样的:

极限编程

要求在编写代码之前先写测试,这样可以强制你在写代码之前好好的思考代码(方法)的功能和逻辑,否则编写的代码很不稳定,那么你需要同时维护测试代码和实际代码,这个工作量就会大大增加。因此在极限编程中,基本过程是这样的:构思-> 编写测试代码-> 编写代码-> 测试,而且编写测试和编写代码都是增量式的,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。

重构

其好处和极限编程中是类似的,因为重构也是要求改一点测一点,减少回归错误造成的时间消耗。

其他情况

我们在开发的时候使用junit写一些适当的测试也是有必要的,因为一般我们也是需要编写测试的代码的,可能原来不是使用的junit,如果使用junit,而且针对接口(方法)编写测试代码会减少以后的维护工作,例如以后对方法内部的修改(这个就是相当于重构的工作了)。另外就是因为junit有断言功能,如果测试结果不通过会告诉我们哪个测试不通过,为什么,而如果是像以前的一般做法是写一些测试代码看其输出结果,然后再由自己来判断结果是否正确,使用junit的好处就是这个结果是否正确的判断是它来完成的,我们只需要看看它告诉我们结果是否正确就可以了,在一般情况下会大大提高效率。

 

 

3.JUnit特性

JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性:

1、用于测试期望结果的断言(Assertion

2、用于共享共同测试数据的测试工具

3、用于方便的组织和运行测试的测试套件

4、图形和文本的测试运行器

 

 

4.JUnit运用

第一步:下载JUnit的jar包,下载地址:https://github.com/junit-team/junit/releases/download/r4.12/junit-4.12.jar;

 

第二步:安装Eclipse安装程序,已经安装好!

 

第三步:利用junit在eclipse中开发自动化脚本;

JUnit可以和很多开发工具进行集成来进行单元测试,我们这里选取较常用的java开发工具Eclipse来使用JUnit4进行单元测试。如何在开发工具Eclipse里 进行单元测试?

 

第四步:首先启动Eclipse,并在Eclipse中建立一个java项目,项目名称为JNuit_test1。如下图所示:

单击【完成】即可;

 

 

 

第五步:在建立好的项目名称(JNuit_test)上右键单击【属性】,系统弹出如下图所示:

第六步:选择java构建路径→库→我们这里选择前面下载的junit-4.12.jar包,故单击【添加外部JAR(X)】按钮,系统弹出如下对话框,选择junit-4.12.jar包后,单击【打开】键,如下图所示:

 

第七步:在建立好的项目名称(JNuittest)上右键单击【新建】→【包】,取包名称为andycpp,系统弹出如下图所示:

第八步:在建立好的类名称【andycpp】上右键单击【新建】→类,取名称为【Calculator】,如下图所示:

第九步:我们在此编写一个类,这是一个能够简单实现加减乘除、平方、开方的计算器类,然后对这些功能进行单元测试。这个类并不是很完美,我们故意保留了一些Bug用于演示,这些Bug在注释中都有说明。该类代码如下:

package andycpp;

 

publicclass Calculator {

    privatestaticintresult; // 静态变量,用于存储运行结果

 

     publicvoid add(int n)  {

      result = result + n;

     }

 

     publicvoid substract(int n)

     {

      result = result - 1;  //Bug: 正确的应该是 result =result-n

     }

 

     publicvoid multiply(int n)

     {

 

     }         // 此方法尚未写好

 

     publicvoid divide(int n)

     {

 

      result = result / n;

 

     }

 

     publicvoid square(int n)

     {

 

      result = n * n;

 

     }

 

     publicvoid squareRoot(int n)

     {

 

      for (; ; ) ;            //Bug : 死循环

 

     }

 

     publicvoid clear()

     {     // 将结果清零

 

      result = 0;

 

     }

 

     publicint getResult()

     {

 

      returnresult;

 

     }

 

}

 

第十步:生成JUnit测试框架,选中已经编好的类,单击右键【新建】→JUnit测试用例,如下图所示:

单击【下一步】显示测试方法,下面我们只选择四项,如下图所示:

单击【完成】键,系统创建了一个测试类,类名称为CalculatorTest.java;代码如下:

第十一步:对上面测试类代码进行完善,代码如下图所示:

package andycpp;

 

import junit.framework.TestCase;

 

import org.junit.Before;

import org.junit.Test;

 

publicclass CalculatorTest extends TestCase{

  

 privatestatic Calculator calculator = new Calculator();

 

     @Before

     publicvoid setUp() throws Exception

     {

      calculator.clear();

     }

 

     

     publicvoid testAdd()   {

      calculator.add(2);

 

      calculator.add(3);

 

      assertEquals(5, calculator.getResult());

 

     }

   

     @Test

     publicvoid testSubstract()

     {

      calculator.add(10);

 

      calculator.substract(8);

      System.out.println(calculator.getResult());

      assertEquals(9, calculator.getResult());

 

     }

 

    @Test

     publicvoid testMultiply() {

         System.out.println("");

    }

 

    @Test

    publicvoid testDivide()

     {

      calculator.add(8);

 

      calculator.divide(2);

     

     

      assertEquals(4, calculator.getResult());

     

     

     }

 

}

第十二步:对上面的测试类进行完善后,右键单击【CalculatorTest.java】→【运行方式】→【JUnit测试】,测试结果如下:

第十三步:为了查询这两个错误,可以双击对应错误结果,在右侧对应方法有显示,如下图所示:

上面的期望结果,若改为【5】,测试加的结果通过,如下图所示:

接着我们看看第二个错误的原因,重新运行测试,如下图所示:

通过上图分析,是程序逻辑存在错误,故查看Calculator.java类,发现Substract的逻辑为如下图所示:

修改程序的逻辑表达式为result=result-n,再次执行测试用例,如下图所示:

以上是一个简单的加减乘除运算的逻辑程序,通过这个程序演示了JUnit测试框架在Eclipse中的运用。

 

 

5.JUnit重要元素

A、@TEST

方法的前面使用@Test标注,以表明这是一个测试方法。对于方法的声明也有如下要求:名字可以随便取,没有任何限制,但是返回值必须为void,而且不能有任何参数。

 

@Test

   publicvoid testAdd() {

      

         calculator.add(2);

         calculator.add(3);

        

         System.out.println(calculator.getResult());

         assertEquals(5, calculator.getResult());

   }

 

 

B、@Before

注解:在每个测试方法之前执行;

 

C、@After

注解:在每个测试方法之后执行;

 

D、@BeforeClass

注解:在所有方法执行之前执行;

 

E、@AfterClass

注解:在所有方法执行之后执行;

 

F、@Test(timeout = xxx)

注解:设置当前测试方法在一定时间内运行完,否则返回错误;

 

G、@Test(expected = Exception.class)

注解:设置被测试的方法是否有异常抛出。抛出异常类型为:Exception.class

 

H、@Ignore

注解:注释掉一个测试方法或一个类,被注释的方法或类,不会被执行。

 

 

 

参考资料:

http://www.blogjava.net/jnbzwm/archive/2010/12/15/340801.html

http://blog.csdn.net/wangpeng047/article/details/9627527

 

 

 

 

 

 

 

你可能感兴趣的:(linux)