JUnit入门

1、简单介绍 java

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

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

       如下是JUnit一些特性的总结: 函数

1)         提供的API可以让你写出測试结果明白的可重用单元測试用例 源码分析

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

3)       提供了单元測试用例成批执行的功能 编码

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

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

对不一样性质的被測对象,如ClassJspServletEjb等,Junit有不一样的使用技巧。由于本文的性质,下面仅以Class測试为例。 设计

如下咱们就叩开JUnit的大门吧!

 

2、下载

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

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

 

3、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 执行測试类,你会看到例如如下的窗体。

 

 

上图中,绿色说明单元測试经过,没有错误产生;假设是红色的,则就是说測试失败了。这样一个简单的单元測试就完毕了,是否是很是easy啊?

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

       你可以对照着上面測试类中的实现来体会下规定——很是easy!而且你在这个測试类中有增长多少个測试方法,就会执行多少个測试方法。

 

4、向前一步

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

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


       另外你是否注意到,上面弹出窗体的一个细节,在绿条如下有ErrorsFailures统计。这二者有何差异呢?

       Failures做为单元測试所指望发生的错误,它预示你的代码有bug,只是也多是你的单元測试代码有逻辑错误(注意是逻辑错误)。Errors不是你所期待的,发生了Error你可以依照如下的顺序来检查:

       检查測试所需的环境,如:数据库链接

       检查单元測试代码

       检查你的系统代码

 

5、成批执行test case

这是前面提到的JUnit特性之中的一个。它方便于系统单元測试的成批执行。使用起来也是很easy,先看下使用代码:

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必须严格遵照上面的写法!

 

6、TestRunner

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

junit.swingui.TestRunner

junit.awtui.TestRunner

junit.textui.TestRunner

 

7、总结

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

相关文章
相关标签/搜索