Junit 入门使用教程
1、Junit 是什么?
JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。
注意:Junit 测试也是程序员测试,即所谓的白盒测试,它需要程序员知道被测试的代码如何完成功能,以及完成什么样的功能
2、Junit 能做什么?
我们知道 Junit 是一个单元测试框架,那么使用 Junit 能让我们快速的完成单元测试。
通常我们写完代码想要测试这段代码的正确性,那么必须新建一个类,然后创建一个 main() 方法,然后编写测试代码。如果需要测试的代码很多呢?那么要么就会建很多main() 方法来测试,要么将其全部写在一个 main() 方法里面。这也会大大的增加测试的复杂度,降低程序员的测试积极性。而 Junit 能很好的解决这个问题,简化单元测试,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。
3、Junit 的用法
一、首先下载 Junit jar 包,这里给两个版本的百度云下载地址:
①、Junit 4.12版本 链接:http://pan.baidu.com/s/1c2cRqdM 密码:hfix
②、Junit 4.8 版本 链接:http://pan.baidu.com/s/1qY8WVGK 密码:ma2u
二、下载完成之后,在项目中将 下载的 jar 包放进去,然后右键,Build--->Add Build Path 即可。

如果你是用 eclipse 开发,也可以不用下载那些jar包,eclipse内部集成了,我们只需要引入即可:
①、选中项目,右键Build--->Add Library

②、弹出来的界面,选中 JUnit,点击 next

③、选中 Junit 的版本,一般我们都用 4.0 以上的。点击 Finish

三、我们先看下面这个例子,看一下 Junit 的用法
①、编写代码(需要测试的类)
public class Calculator {
/**
* 传入两个参数,求和
* @param a
* @param b
* @return
*/
public int add(int a,int b){
return a+b;
}
/**
* 传入两个参数,求差
* @param a
* @param b
* @return
*/
public int sub(int a,int b){
return a-b;
}
}
②、编写测试类
一、不用Junit
public class CalculatorTest {
public static void main(String[] args) {
Calculator c = new Calculator();
//测试 add()方法
int result = c.add(1, 2);
if(result == 3){
System.out.println("add()方法正确");
}
//测试 sub()方法
int result2 = c.sub(2, 1);
if(result2 == 1){
System.out.println("sub()方法正确");
}
}
}
那么我们可以看到,不用 Junit 只能写在 main()方法中,通过运行结果来判断测试结果是否正确。这里需要测试的只有两个方法,如果有很多方法,那么测试代码就会变得很混乱。
二、使用 Junit(看不懂 Assert.assertEquals()方法没关系,可以自己写 if()语句来判断)
public class CalculatorTest {
@Test
//测试 add()方法
public void testAdd(){
Calculator c = new Calculator();
int result = c.add(1, 2);
Assert.assertEquals(result, 3);
}
@Test
//测试 sub()方法
public void testSub(){
Calculator c = new Calculator();
int result = c.sub(2, 1);
Assert.assertEquals(result, 1);
}
}
如何运行 Junit呢?鼠标放在需要测试的方法中,右键,Run As ---->JUnit Test

结果出现如下的绿色横条,则测试通过,红色横条,则测试失败

那么由上面可以看到,使用 Junit 不需要创建 main() 方法,而且每个测试方法一一对应,逻辑特别清晰。可能有读者会问,这样写代码量也并不会减少啊,那么你接着往下看:
首先介绍 Junit 的几种类似于 @Test 的注解:
1.@Test: 测试方法
a)(expected=XXException.class)如果程序的异常和XXException.class一样,则测试通过
b)(timeout=100)如果程序的执行能在100毫秒之内完成,则测试通过
2.@Ignore: 被忽略的测试方法:加上之后,暂时不运行此段代码
3.@Before: 每一个测试方法之前运行
4.@After: 每一个测试方法之后运行
5.@BeforeClass: 方法必须必须要是静态方法(static 声明),所有测试开始之前运行,注意区分before,是所有测试方法
6.@AfterClass: 方法必须要是静态方法(static 声明),所有测试结束之后运行,注意区分 @After
那么上面的例子,我们可以看到,每个 @Test 方法中都有 Calculator c = new Calculator();即类的实例化,那么我们可以将其放入到 @Before 中
public class CalculatorTest {
Calculator c = null;
@Before
public void testBeforeClass(){
c = new Calculator();
}
@Test
//测试 add()方法
public void testAdd(){
int result = c.add(1, 2);
//Assert.assertEquals(result, 3);
//等价于:
if(result == 3){
System.out.println("add()方法正确");
}
}
@Test
//测试 sub()方法
public void testSub(){
int result = c.sub(2, 1);
//Assert.assertEquals(result, 1);
//等价于:
if(result == 1){
System.out.println("sub()方法正确");
}
}
}
同理:别的注解用法我们用一个类来看:
public class JunitTest {
public JunitTest() {
System.out.println("构造函数");
}
@BeforeClass
public static void beforeClass(){
System.out.println("@BeforeClass");
}
@Before
public void befor(){
System.out.println("@Before");
}
@Test
public void test(){
System.out.println("@Test");
}
@Ignore
public void ignore(){
System.out.println("@Ignore");
}
@After
public void after(){
System.out.println("@After");
}
@AfterClass
public static void afterClass(){
System.out.println("@AfterClass");
}
}
结果为:
@BeforeClass
构造函数
@Before
@Test
@After
@AfterClass
注意:编写测试类的原则:
①测试方法上必须使用@Test进行修饰
②测试方法必须使用public void 进行修饰,不能带任何的参数
③新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开
④测试类所在的包名应该和被测试类所在的包名保持一致
⑤测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
⑥测试类使用Test作为类名的后缀(不是必须)
⑦测试方法使用test作为方法名的前缀(不是必须)
Junit 入门使用教程的更多相关文章
- MyBatis入门学习教程-使用MyBatis对表执行CRUD操作
上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...
- JUnit三分钟教程 ---- 快速起步
JUnit三分钟教程 ---- 快速起步 摘自http://lavasoft.blog.51cto.com/62575/65625/ JUnit是个好东西,做大点的项目离不开这东西,实际中用的时候也因 ...
- Spring入门详细教程(二)
前言 本篇紧接着spring入门详细教程(一),建议阅读本篇前,先阅读第一篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/1016553 ...
- JUnit 入门
JUNIT了解学习 转自:关于Java单元测试,你需要知道的一切 转自:JUnit 入门教程 JUnit高级用法之@RunWith @RunWith 关于@RunWith注解,官方文档是这么描述的: ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
- Angular2入门系列教程4-服务
上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...
- ASP.NET Aries 入门开发教程7:DataGrid的行操作(主键操作区)
前言: 抓紧勤奋,再接再励,预计共10篇来结束这个系列. 上一篇介绍:ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑 本篇介绍主键操作区相关内容. 1:什么时候有默认的 ...
随机推荐
- 网站建设常用JQuery插件整理
1.jQuery.lazyload 作用:延迟加载网站图片,常用于电商网站.图片展示网站,对于提高网站打开速度比较有效. 2.Owl Carousel 作用:图片滚动特效.响应式传送带插件,特点是支持 ...
- 老李分享:《Linux Shell脚本攻略》 要点(八)
老李分享:<Linux Shell脚本攻略> 要点(八) 1.打印进程 [root@localhost program_test]# ps -e | head PID TTY ...
- android开发之-软件设置保存-快速学会使用SharedPreferences篇-实测
我们在设计软件的时候,需要记录软件设置的基本信息,那么怎么来保存他们呢?我们可以使用SharedPreferences. SharedPreferences是一个xml文件,用来存储软件的常规设置 ...
- 用Xamarin + VS 编写Android程序体验及其与Android Studio的比较
昨天看了微软2016Build大会,Xamarin免费了.恩,5亿美刀的家伙,哈哈,我也要体验一下..... 1. 首先在Xamarin官网下载安向导:https://www.xamarin.com/ ...
- C语言本身并不提供输入输出语句
C语言本身并不提供输入输出语句,输入和输出操作是由函数来实现的.在C标准函数库中提供了一些输入输出函数,例如,printf函数和scanf函数.在使用他们时,千万不要误认为他们是C语言提供的“输入输出 ...
- spring项目log4j使用入门
log4j是Java开发中经常使用的一个日志框架,功能强大,配置灵活,基本上可以满足项目开发中对日志功能的大部分需求.我前后经历了四五个项目,采用的日志框架都是log4j,这也反应了log4j受欢迎的 ...
- Java中常用来处理时间的三个类:Date、Calendar、SimpleDateFormate,以及Java中的单例设计模式:懒汉式、饿汉式以及静态内部类式
(一)java.util.Date类 1.该类有一个long类型的属性:用来存放时间,是用毫秒数的形式表示,开始的日期是从1970年1月1号 00:00:00. 2.该类的很多方法都已经过时,不 ...
- 使用python发送QQ邮件
这里用到了Python的两个包来发送邮件: smtplib 和 email . Python 的 email 模块里包含了许多实用的邮件格式设置函数,可以用来创建邮件“包裹”.使用的 MIMEText ...
- USACO Section 1.1-3 Friday the Thirteenth
Friday the Thirteenth 黑色星期五 13号又是一个星期五.13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数. 给出N年的一个 ...
- 2017最新苹果 APPLE ID注册流程
不管你是苹果开发者还是苹果爱好者,只要你手中有苹果的终端(IPHONE .IPAD .ITouch,MAC电脑) 你想用苹果的一些服务,你就必须要申请苹果APPLE ID,才能享受到苹果提供高品质的服 ...