JUnit入门

JUnit入门

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

一、简单介绍

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

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

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

1)         提供的API能够让你写出測试结果明白的可重用单元測试用例

2)       提供了三种方式来显示你的測试结果,并且还能够扩展

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

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

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

对不同性质的被測对象,如ClassJspServletEjb等,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方法对一个功能单一的方法进行測试;使用assertEqualsjunit.framework.TestCase中的断言方法来推断測试结果正确与否。

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



 

四、向前一步

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

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


JUnit入门

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

       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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MBUS协议_sbus协议

    MBUS协议_sbus协议在前面关于MBus协议的描述中,个人觉得在描述TSS721部分存在不容易理解的地方,总觉得还可以说的更清楚点,在实际使用中我又发现TSS721的一款替代芯片,在这里作个详细的说明,可以加深对MBus协议实现的理解和TSS721部分的理解。2013年9月10日–推动高能效创新的安森美半导体(ONSemiconductor,美国纳斯达克上市代号:ONNN)推出一款新的集成…

    2022年10月15日
    0
  • java单例模式——详解JAVA单例模式及8种实现方式

    java单例模式——详解JAVA单例模式及8种实现方式##单例模式是最简单也是最基础的设计模式之一,下边一起学习一下单例模式!一.单例模式的定义:单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个PrinterSpooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用

    2022年7月8日
    13
  • pycharm激活成功教程的两种方式

    pycharm激活成功教程的两种方式Pycharm激活成功教程方式1: 0x1,安装0x2,调整时间到2038年。0x3,申请30天试用0x4,退出pycharm0x5,时间调整回来。Pycharm激活成功教程方式2:安装完软件后,启动,在要求输入注册码的界面(菜单栏⇒help⇒register)选择“Licenseserver”输入“http:/

    2022年8月29日
    0
  • 学习如何搭建SpringBoot框架

    学习如何搭建SpringBoot框架SpringBoot是一个非常好用的框架,在项目中我们常常会用到它,今天我来分享一下如何来搭建一个SpringBoot框架。第一步:创建项目打开Idea,点击File->New->Project->SpringInitalizr选择依赖:即使不选择依赖也可以在后续pom.xml文件中添加点击Finish,Idea会自动生成一个SpringBoot项目,如此一来项目就创建好了。第二步:配置数据库到resource->application.proper

    2022年8月20日
    5
  • navicat premium mac 激活码【中文破解版】

    (navicat premium mac 激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月22日
    91
  • 华为三层交换机模拟互通(所有端口都是access端口)

    华为三层交换机模拟互通(所有端口都是access端口)

    2021年8月31日
    321

发表回复

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

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