当前位置: 首页 > 编程日记 > 正文

Junit的安装与使用

一、简介:

JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

它包括以下特性:

1、用于测试期望结果的断言(Assertion)
2、用于共享共同测试数据的测试工具
3、用于方便的组织和运行测试的测试套件
4、图形和文本的测试运行器
二、JUnit的使用:
首先新建一个项目为Calculator,我们编写一个Calculator类,这是一个能够简单实现加减乘除、平方、开方的计算器类,然后对这些功能进行单元测试。这个类并不是很完美,我们故意保留了一些Bug用于演示,这些Bug在注释中都有说明。该类代码如下:

package net.test.unit.junit;

public class Calculate {

private static int result;  //静态变量,用于存储运行结果

public void add(int n){

result=result+n;

}

public void substract(int n){

result=result-1;  Bug: 正确的应该是 result =result-n

}

public void multiply(int n)     {

result=result*n;

}

public void divide(int n)     {

result=result/n;

}

public void squareRoot(int n)     {

for(;;);    //Bug:死循环     }

public void clear()     {

result=0;  //将结果清零

}

public int getResult()     {

return result;

}

}

第二步,将JUnit4单元测试包引入这个项目:在该项目上点右键,点“属性”,如图:

在弹出的属性窗口中,首先在左边选择“Java Build Path”,然后到右上选择“Libraries”标签,之后在最右边点击“Add
Library…”按钮,如下图所示:

然后在新弹出的对话框中选择JUnit4并点击确定,如上图所示,JUnit4软件包就被包含进我们这个项目了。

第三步,生成JUnit测试框架:在Eclipse的Package Explorer中用右键点击该类弹出菜单,选择“JUnit 测试用例”。如下图所示:

在弹出的对话框中,进行相应的选择,如下图所示:

点击“下一步”后,系统会自动列出你这个类中包含的方法,选择你要进行测试的方法。此例中,我们仅对“加、减、乘、除”四个方法进行测  试。如下图所示:

之后系统会自动生成一个新类CalculatorTest,里面包含一些空的测试用例。你只需要将这些测试用例稍作修改即可使用。完整的CalculatorTest代码如下:

JUnit4之前是通过setUp、TearDown方法完成。在Junit4中,仍然可以在每个测试方法运行之前初始化字段,和配置环境,当然也是通过注释完成。Junit4中,通过@befroe替代setUp方法;@After替代tearDown方法。在一个测试类中,甚至可以使用多个@Before来注释多个方法,这些方法都是在每个测试之前运行。说明一点,@Before是在每个测试方法运行前均初始化一次,同理@Ater是在每个测试方法运行完毕后,均匀性一次就是说,经这两个注释的初始化和注销,可以保证各个测试之间的独立性而互不干扰,他的缺点是效率低。另外,不需要在朝类中显示调用初始化和清除方法,只要他们不被覆盖,测试运行程序将根据需要自动调用这些方法。超类中的@Before方法在自来的@Before方法之前调用(与构造函数调用顺序一致),@After方法是子类中的在超类之前运行。
在JUnit4中加入了一项新特性。加入了两个注释:@BeforeClass和@AfterClass,使用这两个注释的方法,在该测试类中,的测试方法之前、后各运行一次,而不是按照方法各运行一次。对于消耗很的啊的资源,可以使用这两个注释。

第四步,运行测试代码:按照上述代码修改完毕后,我们在CalculatorTest类上点右键,选择“Run As à JUnit
Test”来运行我们的测试,如下图所示:

运行结果如下

至此,我们已经完整体验了在Eclipse中使用JUnit的方法。

转载于:https://www.cnblogs.com/gaoruming/p/4530032.html

相关文章:

安装 ssh 的公开密匙到 iPhone 上

1). 在Mac的终端上产生密匙 ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/xxxx/.ssh/id_rsa): Created directory /home/xxxx/.ssh. Enter passphrase (empty for no passphrase): xxx Enter same passphrase again…

浏览器关闭事件处理

//有确认退出var msg_unload"您的文章内容还没有进行保存!";var unloadConfirm {};unloadConfirm.SetConfirmMsg function(confirmMsg){ window.onBeforeUnload function(event) { event event || window.event; event.returnval…

spring注解--@Bean

Configuration public class KnightConfig {Beanpublic Knight knight(){return new BraveKnight(quest () );}}spring的Bean注解用于告诉方法,产生一个Bean对象,然后把这个Bean对象交给spring管理。注意:产生这个Bean对象的方法Spring只会调…

如何用 Windows Live Writer 和 Word 2013 分别发表博客到Cnblog 和CSDN

ps CSDN 老是505错误,放弃了 为什么会写这篇 最近写博客在 Cnblog 上面写博客, 发现图片不能复制了直接粘贴上,这对于把博客当随手笔记的人来说无疑非常痛苦。求助于博客园,他们让我用 Windows Live Writer 试试。我查了下大家推荐…

JavaScript 事件冒泡简介及应用(转)

http://www.jb51.net/article/21801.htm 一、什么是事件冒泡在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返…

不改文件名的情况下上传突破

方法不错,首先就是不强制改上传文件名。还有就是上传目录没有执行的权限。 然后用这方法貌似就可以上传到上级可写目录了。 比如抓这是抓的上传数据包: POST /upload/upfile.asp HTTP/1.1Accept: application/x-shockwave-flash, image/gif, image/x-xbitmap, image…

static interface method calls are not supported at language level 1.6

报错解决(导入项目时) 点击那个红色的小灯泡 下面的那行: set language to … 等待 即可

Objetive-C +load方法研究

load方法的执行时机Objetive-C 的runtime会在一个类的所有方法加载到内存中时调用这个类的load() 方法,因为每个类的方法只是加载一次,所以每个load()方法只调用一次。加载一个类的方法会在一个进程启动开始的时候,这个…

HDU3434数学题

纯粹的数学题,题目的意思是给你一组序列,让你能同时改变它的一个子序列,让其子序列的值增加1,或者减少1. 思路的话,就是找其中的数学规律,给你的序列例如是:3,5,1,4,7。先求出其序列的正差和5-3…

python的基本知识点

一.数据类型 1.整数2.浮点数3.字符串4.布尔值:True/False5.空值:None 二.变量 变量名必须是大小写英文、数字和_的组合,且不能以数字开头 三.常量 全部大写的变量名表示常量,python没有一种机制保证常量不能被修改.PI 3.14156 四.特殊的地板除 // // 除法只取结果的…

上传代码到git上的分支(协同开发)

任意位置右键单击 git bash,输入命令如下: git config --global user.name "用户名" (用户名就是gitlab上的用户名,我的是名字拼音)git config --global user.email "邮箱" (注册gitlab时的邮箱&…

Android网络编程系列 一 Socket抽象层

在《Android网络编程》系列文章中,前面已经将Java的通信底层大致的描述了,在我们了解了TCP/IP通信族架构及其原理,接下来我们就开始来了解基于tcp/ip协议层的Socket抽象层。本篇文章将会让我们清楚的了解和学会使用Socket。什么是Socket&…

HDFS的shell和API操作

1. HDFS的shell操作 hadoop version //查看版本 hadoop fs -appendToFile src(Linux中的文件) dest(hdfs目录下的文件) //追加 hadoop fs -cat file(hdfs目录下的文件) //查看文件内容 Hadoop fs -tail file(hdfs目录下的文件) //查看文件末尾1kb的数据…

C#中的问号用法

在看一些国外牛人写的C#代码时,总是看到会有Boolean?、DateTime?这样的类型,以为是一些新的类型(该类型变量有一些新的属性和方法),后来经过查找相关的资料,发现原来另有微妙。以下是MSDN中对这个问号的解…

L1-006 连续因子

题目: 一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3567,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。 输入格式: 输…

Python Data Structures

1. list 2. stack 3. queue 4. tuple 5. sequence 6. set 7. dict #-*- coding: utf-8 -*-# 添加中文注释Created on 2011-4-29test for python data structureauthor: xuqiang###################list##################print("test for list");a [66.25, 333, 333…

【转】 ubuntu12.04更新源

原文网址:http://blog.chinaunix.net/uid-26404477-id-3382633.html 摘 要:本文列出ubuntu 12.04 LTS更新源列表,内容为网友整理,此处为转载。因为我还在重庆读书,所以在设置自己的源列表的时候选择了电子科技大学的更…

Ubuntu 上创建常用磁盘阵列

RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘,同时希望磁盘失效时不会使对数据的访问受损 失而开发出一定水平的数据保护技术。RAID就是一种由多块廉价…

L1-009 N个数求和

题目 本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。 输入格式: 输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1 a2/…

我的理解:box-sizing

下面是我在博客园找到的,和我遇见的情况很相似,所以摘抄下来,原文见:http://www.cnblogs.com/charling/p/3635031.html box-sizing语法: box-sizing : content-box || border-box || inherit 参数取值: con…

世界最大规模3D打印混凝土步行桥在上海 落成启用

1月12日,世界最大规模3D打印混凝土步行桥在沪落成启用,人们站在桥体上欢庆该新兴建筑体的诞生。 中新网上海1月13日电 (记者 于俊)一座体态优雅、形似飘带的水泥桥12日横跨于上海宝山智慧湾的小河之上,宣告全球最大规模混凝土3D打印步行桥落成…

idea打开web项目之后一直闪烁

解决办法: 点击, 选择第一个(清除缓存并重启) 这时Idea会自动重新启动,之后就没有闪烁的状态了。 一开始我选择是第二个,清除无效的缓存,但是并没有起作用。

第十章:控制文件

控制文件管理[大纲] 控制文件的结构  控制文件的复用  控制文件的重建  控制文件的管理一、数据库控制文件控制文件中记载了数据库的物理结构等重要的数据库信息,如数据文件和日志文件信息。控制文件是用 于维护数据库完整性的重要文件。Oracle 正是使用…

UIImage图片拉伸方法

纵观移动市场,一款移动app,要想长期在移动市场立足,最起码要包含以下几个要素:实用的功能、极强的用户体验、华丽简洁的外观。华丽外观的背后,少不了美工的辛苦设计,但如果开发人员不懂得怎么合理展示这些设…

【摘录】GestureDector使用

boolean onDoubleTap(MotionEvent e)解释:双击的第二下Touch down时触发boolean onDoubleTapEvent(MotionEvent e)解释:双击的第二下Touch down和up都会触发,可用e.getAction()区分。boolean onDown(MotionEvent e)解释:Touch …

IDEA新建springboot项目发生错误

idea新建spring boot项目 选择这个默认的Default 之后弹出提示框如下 这个时候首先试一下更换一下网络,我用的是wifi就换成热点,就可以了,是因为网络的问题

windows form窗体应用程序,建一个记事本参考代码,重点是打开,保存,另存为...

//当点击打开的时候private string files; //建一个成员变量,用来存储打开的路径private void 打开OToolStripMenuItem_Click(object sender, EventArgs e){//openFileDialog1.Filter "文本文件|*txt|视频文件|*avi;*jpg"; //filter建立一个筛选器//ope…

『参考』.net CF组件编程(4)——为自定义组件添加工具箱图标!

前言: 在前三篇的文章中,和大家一起创建了一个用于TCP连接检测的小组件,如果你记不得了,可以通过以下链接去回顾一下: 『参考』.net CF组件编程(1)——基础之后 『参考』.net CF组件编程…

vs2010设置boost开发环境

1. 编译boost类库 2. 设置vs2010的环境 <1>. 编译boost类库 前面一篇文章介绍了如何在linux下建立boost的开发环境&#xff0c;并且编写了一个测试程序&#xff0c;这里将试着在windows下编译boost&#xff0c;同时设置vs2010的开发环境&#xff0c;使用vs来作为开发的…

怎样把字符1变成数字1

直接使用字符bai1减去字符0即可&#xff0c;如&#xff1a;‘1’-0’ 解释&#xff1a; 这样做可行是因为字符0到字符9在ascii编码时是连续的&#xff0c;字符0的ascii值是48&#xff0c;字符1的ascii值是49&#xff0c;其他数字字符依次往后排&#xff0c;而ascii值实际上就…