java如何使用JUnit进行单元测试
注:所有内容都是在eclipse上实现,关于eclipse的安装和jdk的安装配置,请看:http://www.cnblogs.com/fench/p/5914827.html
单元测试是什么?
百度百科的解释是这样的:单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。例如,你可能把一个很大的值放入一个有序list 中去,然后确认该值出现在list 的尾部。或者,你可能会从字符串中删除匹配某种模式的字符,然后确认字符串确实不再包含这些字符了。
简单的说,单元测试就是对你程序中最小的功能模块进行测试,在c语言里可能是一个函数,java中可能是一个方法或者类。
目的就是为了提高代码的质量。
junit是什么?
JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。
也就是说junit就是别人写好的单元测试框架,使用此框架你可以大大缩短你的测试时间和准确度(笔者现在还记得大一刚来的的时候,c语言写的小程序,每次都是重启测试,那种编译-输入--停止-编译的苦日子,很痛苦,今天用junit这个单元测试框架好多了)。
注:eclipse已经自带JUnit, JUnit的当前常用版本分为3.X(需要手动添加),4.X(支持注解)
我的这个版本的eclipse自带JUnit3.X的,本文以JUnit3.x为例进行测试。
下面以 “求最大子数组之和”的例子,简单的介绍一下单元测试是什么,junit如何入门。
package edu.sau.maximun;
public class SubArray {
//求两个数中的最大
public int max(int x, int y){
if(x>y)
return x;
else
return y;
} //最大子数组之和
public int maxSubArr(int[] arr){
int sum = arr[0]; //最大值子数组和
int sub_sum = arr[0];//中间值 for(int i = 1; i<arr.length; i++){
sub_sum = max(arr[i],sub_sum+arr[i] );
sum = max(sub_sum,sum);
}
return sum;
}
}
以上代码实现了“最大子数组之和”的算法,共有max和maxSubArr两个方法,下面开始测试(重新创建一个新包,取名 test,所有测试都是再这个新包完成)
/**.sau.maximun.SubArray;
import junit.framework.TestCase; /**
* @author m
* @单元测试
* @time 2016/10/7
*/
public class TestMaximun extends TestCase { //对方法max进行测试
public void testMax(){
int x = 1; //测试数据
int y = 2;
int z = -1;
SubArray sub = new SubArray();
int result1 = sub.max(x, y);
int result2 = sub.max(y,x);
int result3 = sub.max(z, x);
assertTrue(result1 == y);
assertTrue(result2 == y);
assertTrue(result3 == 1);
} //对方法maxSubArr测试
public void testMaxSubArr(){ int arr1[] ={1,2,3,-1}; //测试用例
int arr2[] = {1,2,-4,8,4,-4,6,-2,1};
int arr3[] ={-4,-2,-1,-3};
int arr4[] = {-4,2,-4,2,-1};
SubArray sub = new SubArray(); assertTrue(sub.maxSubArr(arr1) == 6);
assertTrue(sub.maxSubArr(arr2) == 14);
assertTrue(sub.maxSubArr(arr3) == -1);
assertTrue(sub.maxSubArr(arr4) == 2);
}
}
整个文件的结构目录如下:

程序单元测试的方法:-右击 测试类->Run as ->JUnit test
运行结果:(Errors:0,Failure:0 说明测试通过,如果出错,Failure是单元测试所期望的错误,说明你的代码结果不满足你的要求,Errors需要你查看系统的配置,检查代码。是不是手动输入快好多?)

说明:

总结:测试类需要继承junit.framework.TestCase类,测试方法命名需要按照public void TestXXXX格式,通过断言来判断结果的正确行。
测试范围一定要满足你的所有需求
以测试testMaxSubArr为例,具体的测试样例及目的如下:
|
用例编号 |
用例描述 |
输入数据 | 预期输出数据 | 通过/不通过 | 评价 |
| 1 | 检测能否实现最大数组求和的基本功能(一般情况) | 1,2,3,-1 | 6 | 通过 | 程序实现基本功能 |
| 2 | 最大子数组处于数组中间(一般情况) | 1,2,-4,8,4,-4,6,-2,1 | 14 | 通过 | 程序实现基本功能 |
| 3 | 数组元素均为负数,且第一个元素为最小(特殊情况) | -4,-2,-1,-3 | -1 | 通过 | 程序实现特殊情况的求和 |
| 4 | 数组中存在最大值相同的多个(>=2)子数组(特殊情况) | -4,2,-4,2,-1 | 2 | 通过 | 程序能对多个相同子数组进行保留 |
现在大家已经会基本的单元测试,当然这只是非常简单的使用junit,后期我会写一些关于junit的更具体的介绍。
代码下载地址: https://coding.net/u/fench/p/java-junit/git
作者:fench
2016-10-09 20:40:06
java如何使用JUnit进行单元测试的更多相关文章
- JAVA框架 Spring junit整合单元测试
一.准备工作 1:Junit的需要的jar包: 2.spring的整合的jar包:spring-test-4.2.4.RELEASE.jar 3.代码实现 1) //导入整合的类,帮我们加载对应的配置 ...
- JUnit 4 单元测试
Individual Project ——JUnit 4 单元测试 学习到JUnit单元测试,我拿来测试之前写过的一个计算器(两个依存类:Calc.java CalcFunction.java).代码 ...
- Android之如何使用JUnit进行单元测试
转的:http://www.blogjava.net/qileilove/archive/2014/05/19/413824.html Android中如何使用JUnit进行单元测试 在我们日常开发a ...
- Spring(3)—— Junit框架单元测试
Junit主要用于单元测试,即白盒测试.它是一个开源的由JAVA开发的一个用于测试的框架. Junit的几个基本概念:TestCase,TestSuite,TestFixtrue TestCase:代 ...
- JUnit + Mockito 单元测试(二)
摘自: http://blog.csdn.net/zhangxin09/article/details/42422643 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 入门 ...
- 使用 JUnit 进行单元测试 - 教程
tanyuanji@126.com 版本历史 JUnit 该教程主要讲解 JUnit 4.x 版本的使用,以及如何在Eclipse IDE 中如何使用JUnit 目录 tanyuanji@126. ...
- JUnit + Mockito 单元测试(二)(good)
import org.junit.Test; import org.mockito.Matchers; import org.mockito.Mockito; import java.util.Lis ...
- 使用Junit进行单元测试
使用Junit进行单元测试 一.目的和要求 JUnit是一款由Erich Gamma(<设计模式>的作者)和Kent Beck(极限编程的提出者)编写的开源的回归测试框架,供Java编码人 ...
- Junit进行单元测试
Junit提供 单元测试,多组参数的单元测试,打包单元测试. 比如你写了一个Calculator类: package test_junit; public class Calculator { pri ...
随机推荐
- 关于activity的生命周期的随笔
在activity的生命周期中,我总是容易混淆,onstart和on resume ,on pause和onstop 原来这个都是一对的. onstart 对应 onstop ,意义在于使页面显示出来 ...
- Linux 任务控制
Linux/Unix 提供了不同与 windows 的多任务处理,也提供一套用来切换前后台任务的命令 bg fg & Ctrl+z nohup sitsid Ctrl-Z 挂起程序 user@ ...
- SQL中对于两个不同的表中的属性取差集except运算
SQL中对两个集合取差集运算,使用except关键字,语法格式如下: SELECT column_name(s) FROM table_name1 EXCEPT SELECT column_name( ...
- Xcode8 更新后的坑及常见错误
1.Xcode更新后,command + / 注释整行代码不起作用了,可以终端运行sudo /usr/libexec/xpccachectl,并重启电脑 可以参考http://blog.csdn.n ...
- java比较两个对象是否相等的方法
java比较两个对象是否相等直接使用equals方法进行判断肯定是不会相同的. 例如: Person person1 =new Person("张三"); Person pe ...
- Node.js exports与module.exports的关系
今天搜索module.exports时看到CNode社区上发的Hack Sparrow一篇相关文章的链接 Node.js Module – exports vs module.exports 一篇5年 ...
- java文件下载,上传,解压方法
1.文件下载(亲测可用) private static final int BUFFER = 2 * 1024;// 缓冲区大小(2k)private boolean isSuccess = true ...
- #20145205 《Java程序设计》第4周学习总结
教材学习内容总结 1.面对对象中,因为我们需要设计多个模块,但是有不能像C语言中那样进行分块设计,所以我们用父类和子类进行模块的设计,我们在设计一个较大的程序时,在一个项目中建立不同的文件,用关键字e ...
- .net手机号码归属地查询
调用百度 api http://apistore.baidu.com/apiworks/servicedetail/117.html 贴上代码 using Newtonsoft.Json;using ...
- 【转】自学成才秘籍!机器学习&深度学习经典资料汇总
小编都深深的震惊了,到底是谁那么好整理了那么多干货性的书籍.小编对此人表示崇高的敬意,小编不是文章的生产者,只是文章的搬运工. <Brief History of Machine Learn ...