品牌知名度调研问卷>>

JUnit

#软件应用# 0 0
JUnit是用于编写和运行Java程序单元测试的开源框架,由Kent Beck和Erich Gamma建立它提供了一组注解和断言方法,以及用于执行测试的测试运行器。其现逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个,被广泛应用在Java开发领域中,成为标准的单元测试框架之一。
  • 外文名称: JUnit
  • 创始人: Kent Beck,Erich Gamma
详细介绍 PROFILE +

基本介绍

JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

JUnit是由Erich Gamma和Kent Beck编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

安装

安装很简单,先到以下地址下载一个最新的zip包:

下载完以后解压到你喜欢的目录下,假设是JUNIT_HOME,然后将JUNIT_HOME下的junit.jar包加到你的系统的CLASSPATH环境变量中,对于IDE环境,对于需要用到的junit的项目增加到lib中,其设置不同的IDE有不同的设置,这里不多讲。

测试

最简单的范例如下:

1、创建一个TestCase的子类

package junitfaq;

import java.util.*;

import junit.framework.*;

public class SimpleTest extends TestCase {

public SimpleTest(String name) {

super(name);

}

2、写一个测试方法断言期望的结果

public void testEmptyCollection(){

Collection collection = new ArrayList();

assertTrue(collection.isEmpty());

}

注意:JUnit推荐的做法是以test作为待测试的方法的开头,这样这些方法可以被自动找到并被测试。

3、写一个suite()方法,它会使用反射动态的创建一个包含所有的testXxxx方法的测试套件

public static Test suite() {

return new TestSuite(SimpleTest.class);

}

4、写一个main()方法以文本运行器的方式方便的运行测试

public static void main(String args[]) {

junit.textui.TestRunner.run(suite());

}

}

5、运行测试

以文本方式运行:

java junitfaq.SimpleTest

通过的测试结果是:

.

Time: 0

OK (1 tests)

Time上的小点表示测试个数,如果测试通过则显示OK。否则在小点的后边标上Fail,表示该测试失败。

每次的测试结果都应该是OK的,这样才能说明测试是成功的,如果不成功就要马上根据提示信息进行修正了。

如果JUnit报告了测试没有成功,它会区分失败(failures)和错误(errors)。失败是你的代码中的assert方法失败引起的;而错误则是代码异常引起的,例如ArrayIndexOutOfBoundsException。

以图形方式运行:

java junit.swingui.TestRunner junitfaq.SimpleTest

通过的测试结果在图形界面的绿色条部分。

以上是最简单的测试样例,在实际的测试中我们测试某个类的功能是常常需要执行一些共同的操作,完成以后需要销毁所占用的资源(例如网络连接、数据库连接,关闭打开的文件等),TestCase类给我们提供了setUp方法和tearDown方法,setUp方法的内容在测试你编写的TestCase子类的每个testXxxx方法之前都会运行,而tearDown方法的内容在每个testXxxx方法结束以后都会执行。这个既共享了初始化代码,又消除了各个测试代码之间可能产生的相互影响。

实践

不要认为压力大,就不写测试代码。相反编写测试代码会使你的压力逐渐减轻,因为通过编写测试代码,你对类的行为有了确切的认识。你会更快地编写出有效率地工作代码。

下面是一些具体的编写测试代码的技巧或较好的实践方法:

1.不要用TestCase的构造函数初始化Fixture,而要用setUp()和tearDown()方法。

2.不要依赖或假定测试运行的顺序,因为JUnit利用Vector保存测试方法。所以不同的平台会按不同的顺序从Vector中取出测试方法。

3.避免编写有副作用的TestCase。例如:如果随后的测试依赖于某些特定的交易数据,就不要提交交易数据。简单的回滚就可以了。

4.当继承一个测试类时,记得调用父类的setUp()和tearDown()方法。

5.将测试代码和工作代码放在一起,一边同步编译和更新。(使用Ant中有支持junit的task.)

6.测试类和测试方法应该有一致的命名方案。如在工作类名前加上test从而形成测试类名。

7.确保测试与时间无关,不要依赖使用过期的数据进行测试。导致在随后的维护过程中很难重现测试。

8.如果你编写的软件面向国际市场,编写测试时要考虑国际化的因素。不要仅用母语的Locale进行测试。

9.尽可能地利用JUnit提供地assert/fail方法以及异常处理的方法,可以使代码更为简洁。

10.测试要尽可能地小,执行速度快。

11.不要硬性规定数据文件的路径。

12.利用Junit的自动异常处理书写简洁的测试代码

事实上在Junit中使用try-catch来捕获异常是没有必要的,Junit会自动捕获异常。那些没有被捕获的异常就被当成错误处理。

13.充分利用Junit 的assert/fail方法

assertSame()用来测试两个引用是否指向同一个对象

assertEquals()用来测试两个对象是否相等

14.确保测试代码与时间无关

15.使用文档生成器做测试文档。

JUnit和ant结合

ant提供了两个target:junit和junitreport运行所有测试用例,并生成html格式的报表

具体操作如下:

1.将 junit.jar 放在 ANT_HOMElib 目录下

2.修改 build.xml,加入如下 内容:

-------------- One or more tests failed, check the report for detail... -----------------------------

运行这个target,ant会运行每个TestCase,在report目录下就有了很多TEST*.xml和一些网页打开report目录下的 index.html就可以看到很直观的测试运行报告,一目了然。

在Eclipse中开发、运行JUnit测试相当简单。因为Eclipse本身集成了JUnit相关组件,并对JUnit的运行提供了无缝的支持。

使用帮助

junit3.x

我们通常使用junit 3.8

(1)、使用junit3.x版本进行单元测试时,测试类必须要继承于TestCase父类;

(2)、测试方法需要遵循的原则:

A、public的

B、void的

C、无方法参数

D、方法名称必须以test开头

(3)、不同的Test Case之间一定要保持完全的独立性,不能有任何的关联。

(4)、我们要掌握好测试方法的顺序,不能依赖于测试方法自己的执行顺序。

demo:

public class TestMyNumber extends TestCase {

private MyNumber myNumber;

public TestMyNumber(String name) {

super(name);

}

// 在每个测试方法执行 [之前] 都会被调用

@Override

public void setUp() throws Exception {

// System.out.println("欢迎使用Junit进行单元测试…");

myNumber = new MyNumber();

}

// 在每个测试方法执行 [之后] 都会被调用

@Override

public void tearDown() throws Exception {

// System.out.println("Junit单元测试结束…");

}

public void testDivideByZero() {

Throwable te = null;

try {

myNumber.divide(6, 0);

Assert.fail("测试失败");

} catch (Exception e) {

e.printStackTrace();

te = e;

}

Assert.assertEquals(Exception.class, te.getClass());

Assert.assertEquals("除数不能为 0 ", te.getMessage());

}

}

junit4.x

(1)、使用junit4.x版本进行单元测试时,不用测试类继承TestCase父类,因为,junit4.x全面引入了Annotation来执行我们编写的测试。

(2)、junit4.x版本,引用了注解的方式,进行单元测试;

(3)、junit4.x版本我们常用的注解:

A、@Before 注解:与junit3.x中的setUp()方法功能一样,在每个测试方法之前执行;

B、@After 注解:与junit3.x中的tearDown()方法功能一样,在每个测试方法之后执行;

C、@BeforeClass 注解:在所有方法执行之前执行;

D、@AfterClass 注解:在所有方法执行之后执行;

E、@Test(timeout=xxx)注解:设置当前测试方法在一定时间内运行完,否则返回错误;

F、@Test(expected=Exception.class)注解:设置被测试的方法是否有异常抛出。抛出异常类型为:Exception.class;

G、@Ignore注解:注释掉一个测试方法或一个类,被注释的方法或类,不会被执行。

demo:

package com.an.junit;

import static org.junit.Assert.*;

import org.junit.After;

import org.junit.AfterClass;

import org.junit.Before;

import org.junit.BeforeClass;

import org.junit.Test;

public class TestMyNumber {

private MyNumber myNumber;

@BeforeClass

// 在所有方法执行之前执行

public static void globalInit() {

System.out.println("init all method...");

}

@AfterClass

// 在所有方法执行之后执行

public static void globalDestory() {

System.out.println("destory all method...");

}

@Before

// 在每个测试方法之前执行

public void setUp() {

System.out.println("start setUp method");

myNumber = new MyNumber();

}

@After

// 在每个测试方法之后执行

public void tearDown() {

System.out.println("end tearDown method");

}

@Test(timeout=600)// 设置限定测试方法的运行时间 如果超出则返回错误

public void testAdd() {

System.out.println("testAdd method");

int result = myNumber.add(2, 3);

assertEquals(5, result);

}

@Test

public void testSubtract() {

System.out.println("testSubtract method");

int result = myNumber.subtract(1, 2);

assertEquals(-1, result);

}

@Test

public void testMultiply() {

System.out.println("testMultiply method");

int result = myNumber.multiply(2, 3);

assertEquals(6, result);

}

@Test

public void testDivide() {

System.out.println("testDivide method");

int result = 0;

try {

result = myNumber.divide(6, 2);

} catch (Exception e) {

fail();

}

assertEquals(3, result);

}

@Test(expected = Exception.class)

public void testDivide2() throws Exception {

System.out.println("testDivide2 method");

myNumber.divide(6, 0);

fail("test Error");

}

public static void main(String[] args) {

}

}

特色功能

优点

另外junit是在极限编程和重构(refactor)中被极力推荐使用的工具,因为在实现自动单元测试的情况下可以大大的提高开发的效率,但是实际上编写测试代码也是需要耗费很多的时间和精力的,那么使用这个东西好处到底在哪里呢?笔者认为是这样的:

极限编程

要求在编写代码之前先写测试,这样可以强制你在写代码之前好好的思考代码(方法)的功能和逻辑,否则编写的代码很不稳定,那么你需要同时维护测试代码和实际代码,这个工作量就会大大增加。因此在极限编程中,基本过程是这样的:构思-> 编写测试代码-> 编写代码-> 测试,而且编写测试和编写代码都是增量式的,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。

重构

其好处和极限编程中是类似的,因为重构也是要求改一点测一点,减少回归错误造成的时间消耗。

其他情况

我们在开发的时候使用junit写一些适当的测试也是有必要的,因为一般我们也是需要编写测试的代码的,可能原来不是使用的junit,如果使用junit,而且针对接口(方法)编写测试代码会减少以后的维护工作,例如以后对方法内部的修改(这个就是相当于重构的工作了)。另外就是因为junit有断言功能,如果测试结果不通过会告诉我们哪个测试不通过,为什么,而如果是像以前的一般做法是写一些测试代码看其输出结果,然后再由自己来判断结果是否正确,使用junit的好处就是这个结果是否正确的判断是它来完成的,我们只需要看看它告诉我们结果是否正确就可以了,在一般情况下会大大提高效率。

特性

JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性:

1、用于测试期望结果的断言(Assertion)

2、用于共享共同测试数据的测试工具

3、用于方便的组织和运行测试的测试套件

4、图形和文本的测试运行器

本百科词条由网站注册用户【 CN109625 】编辑上传提供,当前页面所展示的词条介绍涉及宣传内容属于注册用户个人编辑行为,网站不完全保证内容信息的准确性、真实性,也不代表本站立场。 版权声明 反馈 我要认领
最新评论
相关知识文章
十大AI换脸软件排行 视频换脸软件哪个好 ai换脸工具推荐[2026]
ai换脸工具有哪些?视频换脸软件哪个好?Maigoo小编今天为大家带来了十大换脸软件,包括:DeepFaceLab、FaceSwap、ROOP、Reface、FaceFusion、Rope、DeepSwap等,一起来看看吧。
十大国外社交软件app 国外聊天软件哪个最火 外国常用聊天app盘点[2026]
不同国家都有自己流行的社交软件,有的软件用户基数庞大,有的安全私密性更高,有的虽小众但使用体验好。那么,你知道国外用什么聊天软件吗?下面,maigoo小编就为大家盘点国外最火的十大聊天软件,包括WhatsApp、Facebook Messenger、Instagram Direct、iMessage、Skype、Telegram等,一起来了解下这些国外社交软件app吧。
国内十大聊天工具 国内聊天软件排行 聊天交友软件推荐[2026]
近五年来,我国移动社交用户规模持续增长,到2019年已有7.77亿人左右,同时,各类社交产品层出不穷,企图从中分一杯羹;那么时至今日,用户活跃度最高的聊天软件有哪些呢?微信、QQ、陌陌、钉钉、探探、Soul、积目、米聊等聊天工具市场占有率如何?下面跟随maigoo小编看看这些聊天交友软件!
国外十大最火的短视频app推荐 外国人常用的短视频软件有哪些[2026]
外国人常用的短视频软件有哪些,国外短视频app哪个最火?Maigoo小编为大家带来了国外十大最火的短视频app,如:TikTok、YouTube Shorts、Instagram Reels、Kwai、Snapchat Spotlight、Moj、Likee 等,一起来看看吧。
十大去马赛克软件排行 视频去马赛克软件哪个好用[2026]
去马赛克软件有哪些?视频去马赛克软件哪个好用?Maigoo小编为大家带来了十大去马赛克软件排行,如Lada、JavPlayer、DeepMosaics、CodeFormer、Topaz Video AI、HitPaw VikPea、DeepCreamPy等,一起来看看吧。
十大建模软件排行榜 3d建模软件有哪些 3d制图软件哪个好[2026]
3d建模软件有哪些?3d制图软件哪个好?Maigoo小编今天为大家带来了十大建模软件,包括:Cinema 4D、Blender、Maya、3ds Max、ZBrush、Rhinoceros、SketchUp等,一起来看看吧。
十大室内设计软件 装修设计软件排名 家装设计软件哪个最好用[2026]
室内设计是一个专业性极强的领域,设计师要在安全、实用、有限预算的前提下,充分考虑空间、色彩、光影、装饰、陈设、绿化等要素进行设计。那么在当今室内设计领域,有哪些好用的装修设计软件呢?3DS MAX、AutoCAD、草图大师、Photoshop、ArchiCAD、Vray、Lightscape、Sweet Home 3D等室内设计软件如何?下面跟随买购网编辑一起看看!
十大ai聊天自动软件 ai聊天APP哪个好 AI对话聊天软件推荐[2026]
随着AI的盛行,和AI聊天已经成为许多年轻人的发泄出口,AI能做到24小时的情感陪伴,情绪价值拉满,那ai聊天APP哪个好呢?Maigoo小编为大家带来了十大ai聊天自动软件,如:ChatGPT、Talkie、Character.Ai、Replika、豆包、Claude、AlienChat等,一起来看看吧。
十大编程软件排行榜 编程开发工具大全 c语言编程软件有哪些[2026]
世界上主流的编程语言有C、Java、Python、C++、C#、Visual Basic、PHP等,针对这些编程语言,又有相对应的编程开发工具被广泛运用。那么你知道主流的编程软件有哪些吗?下面maigoo网编辑为大家盘点常见的十大编程工具,包括Visual Studio、IntelliJ IDEA、PyCharm、WebStorm、Android Studio、Xcode等,一起来了解下吧。
十大装修软件推荐 装修设计软件排名 装修软件app哪个好〈2026〉
近些年,各大小家装公司逐渐向数字化转型。随着行业内一线品牌齐家网在香港的上市,标志着互联网家装模式的成熟。如今线上家装领域中,土巴兔装修、酷家乐设计师、齐家、爱空间装修、好好住、住小帮、知户型等装修软件,已成为越来越多业主的选择,这些家装设计软件带来的一站式服务,让装修变得更省心。下面和maigoo编辑一起看看!
十大跑分软件排行 电脑跑分软件哪个好 靠谱的电脑检测软件推荐〈2026〉
电脑跑分,即是利用软件对电脑硬件进行性能测试,分数越高,在一定程度上代表着性能越强。如今电脑配置各不相同,要想更准确的测试出性能如何,得先知道跑分软件哪个好,接下来请跟随maigoo小编一起看看3D Mark、鲁大师、AIDA64、PCMark、FurMark、GPU-Z、CPU-Z、Fritz Chess Benchmark、GeekBench等电脑跑分软件!
国内十大应用市场 安卓应用商店排名 好用的手机软件商店〈2026〉
对于手机用户来说,应用商店必不可少,虽然许多人都是使用本机自带的商店,但是找不到app的情况经常出现,那么有哪些好用的手机软件商店呢?下面Maigoo小编就为大家带来了国内十大应用商店,包括腾讯应用宝、华为应用市场、OPPO软件商店、360手机助手、小米应用商店、百度手机助手、PP助手等,一起来了解下吧。
十大网上医疗咨询平台 线上问诊app哪个好 医生在线咨询平台〈2026〉
互联网医院近年规模化发展,不仅有巨头企业入局,还有国家政策支持,那么优质的线上问诊平台有哪些?线上问诊app哪个好?下面,CNPP小编为大家分享十大网上医疗咨询平台,包括好大夫在线、叮当快药、快速问医生、京东健康等线上医生咨询app,都较具代表性。各平台运营情况请以官方实时调整为准。
十大最好玩小程序游戏 微信小程序游戏排行 最火微信小游戏推荐[2026]
微信小程序游戏是一种轻量级的游戏应用,不仅开发成本低、访问便捷、占用空间少,还支持多种游戏类型。那么你知道时下最热门的微信小程序游戏有哪些吗?本文Maigoo小编盘点了十大好玩的小程序游戏,包括三国:冰河时代、向僵尸开炮、羊了个羊:星球、无尽冬日、灵画师等,一起来看看吧!
中国台湾十大最常用的软件 台湾民众常用app排行 台湾最火的APP应用〈2026〉
相关统计数据显示,台湾同胞们最喜欢的应用是实时通讯类APP,其次是社群平台类APP、地图APP、娱乐类APP等。本文中,maigoo小编就带大家看看台湾常用的软件有哪些,一起了解下台湾app排名榜单,例如Line、Messenger、Instagram、TikTok、YouTube、Uber、‌Foodpanda等,都是极具代表性的,在台湾拥有广泛的用户基础。
十大主流收音机软件 手机广播app哪个好 热门收音机app推荐[2026]
收音机软件是一种通过互联网或移动网络接收并播放广播内容的应用软件。用户可以通过收音机软件随时随地收听国内外各类电台,包括新闻、音乐、体育等多种类型。随着移动设备和智能设备的普及,收音机软件种类也越来越多,功能各异。那你知道手机广播app哪个好?主流收音机软件有哪些吗?本期Maigoo网编就为大家盘点下十大主流收音机软件,上榜的有喜马拉雅FM、蜻蜓FM、云听、TuneIn Radio、豆瓣FM、荔枝FM,一起来详细了解下吧。
十大天气预报APP软件 好用的天气app排行 天气预报软件哪个最准确〈2026〉
比达咨询(BDR)研究数据显示,我国移动天气软件以2009-2013年为萌芽期,各类天气预报app相继衍生,到2016年得益于大数据、物联网、云计算等技术的应用,从而进入高速发展期。时至今日,墨迹天气、最美天气、天气通、彩云天气、2345天气王、中国天气通等天气app已与人们的生活密不可分,下面跟随MAIGoo编辑来认识下!
十大靠谱的二手房app 买二手房用什么软件 二手房交易软件推荐〈2026〉
我国二手房市场规模庞大,不同地区的挂牌量、成交量、成交价均有不同表现。那么现在市面上,看二手房的app有哪些呢,二手房app哪个好用?本文中maigoo小编盘点了十大二手房交易软件,包括贝壳找房、安居客、链家,以及我爱我家、房天下、乐有家、中原找房、幸福里、乐居买房等。下面一起来详细了解下。
十大好用的写作软件 写小说的软件排行 可以写小说的软件有哪些〈2026〉
互联网应用的兴起,导致传统写作方式发生了巨大改变,依托于计算机的智能数据处理,写作软件可以为写作者统计作品字数,生成作品框架,纠正语法错误/错别字等。maigoo小编为大家筛选了一批好用的可以写小说的软件,其中有笔灵AI写作、迅捷AI写作、AI写作宝、写作猫、小黑屋云写作、作家助手、壹写作、墨者写作等,一起看看!
七大分屏软件推荐 手机同屏多窗口软件 手机分屏软件哪个好〈2026〉
机分屏软件既能发挥大屏幕的多视角操作优势,又能免去后台应用来回切换的繁琐,一边打游戏一边聊天,足以让效率翻倍;maigoo编辑针对手机分屏技术,盘点了VMOS、多任务分屏、SkyOlin Helper、多屏任务插件、牛轧糖平行窗口、XHFW3、XMultiWindow等安卓分屏软件,一起来看看这些分屏软件的分屏效果如何!