您的位置:首页 > 编程语言 > Java开发

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

2016-11-07 15:53 239 查看
在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;
 

 
 
 
 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: