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源码分析的文章。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python dataframe fillna_python缺失值处理 fillna

    python dataframe fillna_python缺失值处理 fillna约定:importpandasaspdimportnumpyasnpfromnumpyimportnanasNaN填充缺失数据fillna()是最主要的处理方式了。df1=pd.DataFrame([[1,2,3],[NaN,NaN,2],[NaN,NaN,NaN],[8,8,NaN]])df1代码结果:01201.02.03.01NaNNaN2.02NaNNaNNaN38….

  • 1.2线性代数-行列式的性质

    行列式的性质:性质1:;行列式转置值不变对行成立的性质,对列也成立性质二:两行互换(两列互换),行列式的值要变号证明思路:若D中的每一项都和D1中的每一项差一个负号,那么D=-D13214是1234经过一次顺序变换得来的(1和3变换位置),1234为偶,3214肯定是奇原因:2,7,12,13列标的排法没变,只是行标变了。原来是1-2-3-4行,现在变成了3-2-1-4推论:两行或者两列对应相等,行列式值等于0若第一行和第三行互换,那么根据…

  • pycharm每次运行需选择interpreter_pycharm怎么配置python环境变量

    pycharm每次运行需选择interpreter_pycharm怎么配置python环境变量在运行时就出现了下图情况,也不知道咋回事,之前删了些以为没用的文件夹,估计是删错了,环境没了。关闭后上面窗口后打开Settings→projectInterpreter选项你里面可能有多个,可以删掉重新添加一个有可能会遇到目录不为空的情况,因为你之前可能创建过这个文件路径啥的复制下面的路径,进去删掉原来的路径里的文件夹。然后再点击ok,重新创建一个…

  • JSP 内置对象request常见用法

    JSP 内置对象request常见用法随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)1、访问请求参数<ahref=”login.jsp?name=张三&sex=man&id=”>传递参数</a>login.jsp关键代码…

  • eBPF 介绍_bcp方案是什么意思

    eBPF 介绍_bcp方案是什么意思eBPF介绍Tcpdump是Linux平台常用的网络数据包抓取及分析工具,tcpdump主要通过libpcap实现,而libpcap就是基于eBPF。先介绍BPF(BerkeleyPacketFilter),BPF是基于寄存器虚拟机实现的,支持JIT(Just-In-Time),比基于栈实现的性能高很多。它能载入用户态代码并且在内核环境下运行,内核提供BPF相关的接口,用户可以将代码编译成字节码,通过BPF接口加载到BPF虚拟机中,当然用户代码跑在内核环境中是有风险的

  • 墙裂推荐4款js网页烟花特效

    以下是几款网页特效和一款软件:http://keleyi.com/keleyi/phtml/jstexiao/2.htmhttp://keleyi.com/keleyi/phtml/html5/14

    2021年12月22日

发表回复

您的电子邮箱地址不会被公开。

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