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


相关推荐

  • navicat premium 15 激活码 mac(JetBrains全家桶)「建议收藏」

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

    2022年3月21日
    151
  • 文件的三种打开方式

    文件的三种打开方式文件打开的三种方式文件操作的基础模式有三种(默认的操作为r模式):r模式为readw模式为writea模式为append文件读写内容的格式有两种(默认的读写内容的模式为b模式):t模式为t

    2022年7月4日
    21
  • Python十大装B语法「建议收藏」

    Python十大装B语法「建议收藏」Python是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视Python语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现Python语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。

    2022年6月2日
    42
  • linux 安装tinyxml,使用TinyXml「建议收藏」

    linux 安装tinyxml,使用TinyXml「建议收藏」使用TinyXml的两种方法。第一,导入所需的头文件和cpp文件TinyXml由两个头文件(.h文件)和四个CPP文件(.cpp文件)构成,用的时候,只要将(tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp)导入工程就可以用它的东西了。这就是开源的好处,就跟你自己写的程序一样,想怎么用都行。…

    2022年6月11日
    232
  • c# 看门狗 程序_看门狗制作东西怎么切换

    c# 看门狗 程序_看门狗制作东西怎么切换C#制作简单的看门狗程序这个类实现了程序退出能重启,但是程序停止运行弹出对话框,进程并没有退出却无法重启。希望有好建议处理这个bug的朋友提出你们的宝贵意见。源码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Diagnostics;usi

    2025年6月12日
    8
  • 十大常见web漏洞及防范[通俗易懂]

    十大常见web漏洞及防范[通俗易懂]十大常见web漏洞一、SQL注入漏洞SQL注入攻击(SQLInjection),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。在设计程序,忽略了对输入字符串中夹带的SQL指令的检查,被数据库误认为是正常的SQL指令而运行,从而使数据库受到攻击,可能导致数据被窃取、…

    2022年6月2日
    63

发表回复

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

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