JUnit入门

摘要:
JUnit的设计很小,但功能强大。现在让我们敲开JUnit的大门!这样,您的系统可以使用JUnit编写单元测试代码!建议在Setup方法中使用JUnit进行初始化。JUnit提供了一对方法。一种是在执行测试方法之前初始化一些先决条件,另一种是测试完成后删除初始化条件(参见下图)。6、 TestRunner给出了三种在JUnit中表达TestRunner的方法。

一、简单介绍

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入门第1张

 

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

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

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

 

四、向前一步

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

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

JUnit入门第2张


       另外你是否注意到,上面弹出窗体的一个细节,在绿条以下有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源码分析的文章。

免责声明:文章转载自《JUnit入门》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用PHP解压文件Unzip新玩法-使用AllArgsConstructor+filal代替autowired下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ES检索分组统计异常: ElasticsearchStatusException [Elasticsearch exception [type=illegal_argument_exception

异常名称:ElasticsearchStatusException&illegal_argument_exception 异常分析:按照brand字段进行分组时出现此异常,brand字段mapping出现问题? 异常原因:brand字段初始化时 type 默认为keyword 从而进行了分词,导致在brand字段上做分组时找不到此字段 异常详情:...

junit私有方法测试

很多人说类的私有方法不用测试,理由是类私有方法只允许被本类访问,而其他类无权调用。事实上并非如此,来看一个范例程序,Commodity_Parent是一个商品父类,定义了两个商品类基础属性:commodity_name,commodity_price,分别是商品的名称和价格。二组公共和两组受保护的实例方法分别是getcommodity_name(),ge...

Reactor 3 学习笔记(1)

Reactor 3 与之前学习的RxJava是同一类(反应式编程)框架,基本概念大致差不多,简单记录一下: Reactor 3 利用了java 8中的CompletableFuture、Stream、Duration,在此基础上发展出了二个更通用的模型:Flux及Mono. 一、Flux Flux 简单点讲,就是一个可以发射1到N个元素的异步"发射器",官...

Robolectric测试框架使用笔记

1. 概述 Robolectric(http://robolectric.org/)是一款支持在桌面JVM模拟Android环境的测试框架,通过shadow包下的类来截取view、activity等类的调用,代替它们运行。举个例子说明一下,比如android里面有个类叫TextView,他们实现了一个类叫ShadowTextView。这个类基本上实现了Te...

JUnit4总结

JUnit4使用要求: 测试方法必须使用@Test进行修饰 测试方法必须使用public void 进行修饰,不能带任何的参数 新建一个源代码目录来存放我们的测试代码 测试类的包应该和被测试类保持一致 测试单元中的每个方法必须可以独立测试,测试方法不能有任何的依赖 测试类使用Test作为类名的后缀 测试方法使用test作为方法名的前缀 注意:3,6,7...

spring装配bean的三种方式及其混合装配

在spring容器中装配bean有三种基本方式和混合装配方式: 隐式的bean自动发现机制和自动装配 在java中进行显式配置 在xml中配置 混合装配(在多个java文件中配置、在JavaConfig中引用XML配置、在XML中引用JavaConfig配置) 一、使用自动化方式装配bean示例: 1:创建maven项目并引入依赖: <?xml...