JUnit入门

转载 2015年07月10日 17:29:29


http://blog.csdn.net/ai92/article/details/302844


一、简介

JUnit是一个开源的java单元测试框架。在1997年,由 Erich Gamma 和 Kent Beck 开发完成。这两个牛人中Erich Gamma 是 GOF 之一;Kent Beck 则在 XP 中有重要的贡献(你觉得眼熟一点都不奇怪)。

       正如常言道:“麻雀虽小,五脏俱全。” JUnit设计的非常小巧,但是功能却非常强大。

       下面是JUnit一些特性的总结:

1)         提供的API可以让你写出测试结果明确的可重用单元测试用例

2)       提供了三种方式来显示你的测试结果,而且还可以扩展

3)       提供了单元测试用例成批运行的功能

4)       超轻量级而且使用简单,没有商业性的欺骗和无用的向导

5)       整个框架设计良好,易扩展

对不同性质的被测对象,如Class,Jsp,Servlet,Ejb等,Junit有不同的使用技巧。由于本文的性质,以下仅以Class测试为例。

下面我们就叩开JUnit的大门吧!

 

二、下载

点击http://www.junit.org可以下载到最新版本的JUnit,本文使用的为3.8.1版。至于安装或者配置之类,你只需要轻松的将下载下来的压缩包中的jar文件,放到你工程的classpath中就可以了。

这样,你的系统中就可以使用JUnit编写单元测试代码了(是不是很简单)!

 

三、HelloWorld

记得在几乎每本语言教学书上都能找到HelloWorld这个入门代码。今天在这里,我们也从一个简单到根本不用单元测试的例子入手。这是一个只会做两数加减的超级简单的计算器(小学一年级必备极品)。代码如下:

public class SampleCalculator

{

       public int add(int augend , int addend)

       {

              return augend + addend ;

       }     

      

       public int subtration(int minuend , int subtrahend)

       {     

              return minuend - subtrahend ;

       }

}

将上面的代码编译通过。下面就是我为上面程序写的一个单元测试用例:

//请注意这个程序里面类名和方法名的特征

public class TestSample extends TestCase

{

       public void testAdd()

       {     

SampleCalculator calculator = new SampleCalculator();   

              int result = calculator.add(50 , 20);

              assertEquals(70 , result);

       }

       public void testSubtration()

       {

              SampleCalculator calculator = new SampleCalculator();

              int result = calculator.subtration(50 , 20);

              assertEquals(30 , result);

       }

}

       好了,在DOS命令行里面输入javac -classpath .;junit.jar TestSample.java 将测试类编译通过。然后再输入java -classpath .;junit.jar junit.swingui.TestRunner TestSample 运行测试类,你会看到如下的窗口。

 

 

上图中,绿色说明单元测试通过,没有错误产生;如果是红色的,则就是说测试失败了。这样一个简单的单元测试就完成了,是不是很容易啊?

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

       你可以对比着上面测试类中的实现来体会下规定——很简单!而且你在这个测试类中有加入多少个测试方法,就会运行多少个测试方法。

 

四、向前一步

学完了HelloWorld,你已经可以编写标准的单元测试用例了。但是还有一些细节,这里还要说明一下。不要急,很快的!

你在看上面的代码的时候,是不是注意到每个TestXXX方法中都有一条SampleCalculator初始化语句?这很明显不符合编码规范。你可能正要将它提取出来放到构造函数里面去。且慢!在JUnit中的初始化是建议在Setup方法中作的。JUnit提供了一对方法,一个在运行测试方法前初始化一些必备条件而另一个就是测试完毕后去掉初始化的条件(见下图)。


       另外你是否注意到,上面弹出窗口的一个细节,在绿条下面有Errors、Failures统计。这两者有何区别呢?

       Failures作为单元测试所期望发生的错误,它预示你的代码有bug,不过也可能是你的单元测试代码有逻辑错误(注意是逻辑错误)。Errors不是你所期待的,发生了Error你可以按照下面的顺序来检查:

       检查测试所需的环境,如:数据库连接

       检查单元测试代码

       检查你的系统代码

 

五、成批运行test case

这是前面提到的JUnit特性之一。它方便于系统单元测试的成批运行。使用起来也是非常简单,先看下使用代码:

import junit.framework.Test;

import junit.framework.TestSuite;

public class TestAll{

    public static Test suite(){

        TestSuite suite = new TestSuite("TestSuite Test");

        suite.addTestSuite( TestSample.class);

        return suite;

    }

}

       这个测试程序的编译、运行,和上面TestSample的方式是一样的。

javac -classpath .;junit.jar TestAll.java

java -classpath .;junit.jar junit.swingui.TestRunner TestAll

怎么样?这样你在suite方法里面添加几个TestCase就会运行几个,而且它也可以添加TestSuite来将小一点的集合加入大的集合中来,方便了对于不断增加的TestCase的管理和维护。

呵呵,你觉得suite方法的作用是不是于java应用程序的main很类似?并且这里的suite必须严格遵守上面的写法!

 

六、TestRunner

在JUnit中已经给出了三种方式表示的TestRunner。你可以分别运行体验下他们的不同。

junit.swingui.TestRunner

junit.awtui.TestRunner

junit.textui.TestRunner

 

七、总结

本文轻松简要的介绍了JUnit使用的入门知识。完全没有涉及到深入的技巧和使用规范。而这些请关注我关于JUnit高级使用、JUnit源代码分析的文章。


JUnit4使用教程-快速入门

序言        大学刚学java的时候就听说过JUnit了,单元测试框架,很好用的测试框架,JUnit测试框架将测试更加便捷和容易,编写测试代码也是简单、明了,功能强大。今天我给大家简单分享一下...
  • chenleixing
  • chenleixing
  • 2015年03月14日 14:46
  • 61104

Junit4入门第一个例子

1.使用规则 * 1.测试方法上必须使用@Test进行修饰 * 2.测试方法必须使用public void 进行修饰,不能带任何的参数 * 3.新建一个源代码目录来存放我们的测试代码  * 4.测试类...
  • Chenyt01
  • Chenyt01
  • 2016年05月17日 21:06
  • 452

Junit 入门(一)

Junit 入门
  • yangsuhong
  • yangsuhong
  • 2015年12月22日 15:37
  • 400

Eclipse maven工程中如何配置slf4j+junit

Author: kagula Last Update Date: 2016-9-7 环境: [1]Eclipse Mars.2 [2]JDK 1.7 [3]slf4j-log4j12 1.7...
  • lee353086
  • lee353086
  • 2016年09月07日 15:25
  • 947

单元测试入门+junit4介绍+简单小实例

一.什么是单元测试 通俗的讲,比如我写了一个类,我这个类是要给别人用的,在别人用之前我要测试这个类是否有bug。这中测试就是单元测试。 二.为什么要进行单元测试 (一)在团队开发项目的过程中,我...
  • zj_helloWorld
  • zj_helloWorld
  • 2015年04月21日 16:43
  • 5478

JUnit入门

[转]一、简介JUnit是一个开源的java单元测试框架。在1997年,由 Erich Gamma 和 Kent Beck 开发完成。这两个牛人中 Erich Gamma 是 GOF 之一;Kent ...
  • cothly
  • cothly
  • 2007年03月16日 15:36
  • 543

JUnit 入门

1.JUnit 软件测试在软件投入使用前,对软件需求分析,设计规格说和编码进行最后的审查,这是软件质量保证的关键步骤。大量的数据表明,在软件测试的工作量往往占软件开发总工作的40%以上,而且成本不菲。...
  • yuezu1026
  • yuezu1026
  • 2009年03月26日 15:36
  • 296

JUnit入门

JUnit入门cherami 整理  安装JUnit安装很简单,先到以下地址下载一个最新的zip包:http://download.sourceforge.net/junit/下载完以后解压缩到你喜欢...
  • duoshanx
  • duoshanx
  • 2004年09月26日 05:07
  • 1784

Junit入门

一、简介JUnit是一个开源的java单元测试框架。在1997年,由 Erich Gamma 和 Kent Beck 开发完成。这两个牛人中 Erich Gamma 是 GOF 之一;Kent Bec...
  • zsl198854
  • zsl198854
  • 2008年05月12日 04:58
  • 227

JUnit入门

  JUnit是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性:  1、用于测试期望结果的断言(Asse...
  • hmglly
  • hmglly
  • 2006年10月16日 14:31
  • 523
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JUnit入门
举报原因:
原因补充:

(最多只允许输入30个字)