JUnit入门

JUnit入门

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

一、简单介绍

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文件,放到你project的classpath中就能够了。

这样,你的系统中就能够使用JUnit编写单元測试代码了(是不是非常easy)!



 

三、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入门

 

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

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

       你能够对照着上面測试类中的实现来体会下规定——非常easy!并且你在这个測试类中有添�多少个測试方法,就会执行多少个測试方法。



 

四、向前一步

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

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


JUnit入门

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

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

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

       检查单元測试代码

       检查你的系统代码



 

五、成批执行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必须严格遵守上面的写法!



 

六、TestRunner

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

junit.swingui.TestRunner

junit.awtui.TestRunner

junit.textui.TestRunner



 

七、总结

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118286.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • VS2010 中文版MSDN下载

    VS2010 中文版MSDN下载VS2010距发布已经有快两个月了,一直苦等的VS2010中文版终于出现了,灰太狼最近有点忙发现的还有点晚,现在马上提供给大家VS2010中文版的MSDN下载资源。VS2010中文版MSDN下载地址请访问:VS2010中文版MSDN下载转载于:https://www.cnblogs.com/rocky99261/archive/2010/06/03/1751003.html…

    2022年7月16日
  • 纯CSS画三角形

    纯CSS画三角形之前遇到过的问题如果查了然后懂了,然后没有及时复盘思考,就很容易还回去,今天把许久之前的这个知识点再整理一下,一是加深自己的记忆,二也是让初学者更容易懂。首先,创建一个空的div<divclass="triangle"></div>然后,CSS处理它的边框,给它不一样的颜色,好观察.triangle{border-left:100pxs…

    2022年6月24日
  • @GetMapping和@GetMapping(value=““)的区别纪要「建议收藏」

    问题:@GetMapping指定value和不指定value的区别是什么?背景:刚开始接触时的理解@GetMapping是不需要有value的,以为没有指定的value就无法访问对应的请求接口.后来经过实战和学习……今天有空来立项说明一下.答案: 1.首先要清楚@GetMapping的标准写法肯定是有对应的value指向的. 2.对于没有对应value指向的@GetMapping有且只有一个.在这种情况下当你的路径指向这个@GetMapping的上级路径时系统会默认找寻该.

    2022年4月7日
  • mysql分页查询如何优化_mysql分页查询优化

    mysql分页查询如何优化_mysql分页查询优化测试实验1.直接用limitstart,count分页语句,也是我程序中用的方法:select*fromproductlimitstart,count当起始页较小时,查询没有性能问题,我们分别看下从10,100,1000,10000开始分页的执行时间(每页取20条),如下:select*fromproductlimit10,200.016秒sele…

    2022年6月26日
  • efi shell的英文介绍_请问电脑开机后显示英文字母efi shell version 2.31是什么意思…

    efi shell的英文介绍_请问电脑开机后显示英文字母efi shell version 2.31是什么意思…你好你说的这种情况,一般都是由系统软件、内存、硬盘引起的。1电脑不心装上了恶意软件,或上网时产生了恶意程序,建议用360卫士、金山卫士等软件,清理垃圾,查杀恶意软件,就可能解决。实在不行,重装,还原过系统,可以解决软件引起的问题。2如果不能进入系统,可以开机后到系统选择那里按f8选起作用的最后一次正确配置和安全模式,可能可以进入系统。3点开始菜单运行输入cmd回车,在…

    2022年7月24日
  • 微信API接口_微信下载

    微信API接口_微信下载整理一下微信API文档,以备未来开发,本文API内容为常用的微信开发API整理,内容有待完善……packagecn.vision.weixindemo.utils.base.API;publicclassWeiXin_API{//授权类/***获取授权Token*https请求方式:GET*字段…

    2022年10月2日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号