三分钟学会JUnit单元测试
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/48756845
之前在做.net项目的时候,如果需要测试,可以建立一个单元测试项目:
在java中也一样,进行单元测试的时候,可以用JUnit进行测试。
下面用一个超级简单的小例子,来一起学习一下如何使用JUnit进行单元测试。
1、引入jar包
在使用JUnit之前,要先引入Junit的jar包
2、被测试的方法:
假如UserManager类中的三个方法需要被测试,这里列举出UserManager类中需要被测试的三个方法:
public class UserManager {
public void add(String username) {
System.out.println("add----"+username);
}
public void del(String username) {
System.out.println("del----"+username);
}
public String findUserById(String userId){
return "Danny";
}
}
3、编写单元测试类
建立用来测试UserManager中方法的测试类UserManagerTest.java:
import junit.framework.TestCase;
public class UserManagerTest extends TestCase {
public void testAdd() {
UserManager usermanager = new UserManager();
usermanager.add("Danny");
}
public void testDel() {
UserManager usermanager = new UserManager();
usermanager.del("Danny");
}
public void testFindUserById() {
UserManager usermanager = new UserManager();
String username = usermanager.findUserById("0001");
System.out.println(username);
}
}
注意:单元测试类必须要继承 junit.framework.TestCase 类。
4、进行单元测试
这时,一个单元测试就建好了( 真的 so easy 有木有?),右键点击被测试方法的方法名 → Run As → JUnit Test,即可执行测试,比如对上面的testAdd方法测试的效果如下:
左上方有表示成功执行的绿色进度条、执行过程中有0个错误和0个失败、执行时间为0.007秒等测试信息。
到此,您就可以通过上述信息进行判断您的模块是否正确,性能是否还可以再优化,也可以用通过调试、打印等方式来辅助观察测试的执行情况。
扩展——JUnit断言
JUnit断言,听起来很高大上,其实就是JUnit为我们提供的几个函数,用来辅助说明被测方法是否达到了预期效果。
比如JUnit中的一个断言assertEquals(expected,actual),expectd表示测试结果的期望值,actual表示测试结果的实际值。 用在上述测试类UserManagerTest中的testFindUserById()方法中的情景如下:
public void testFindUserById() {
UserManager usermanager = new UserManager();
String actual= usermanager.findUserById("0001");
String expected="Danny";
this.assertEquals(expected,actual);//断言
}
这里的预期值写的是”Danny”,实际测试效果为测试成功:
当把预期值改为”DannyHoo”,实际测试效果为测试失败:
JUnit还为我们提供了多种断言,比如验证测试结果是否为null的断言——assertNull(object)、验证测试结果是否为true的断言——assertTrue(condition)等等。如果想了解更多,可以参考JUnit的帮助文档,这里不再一 一列举。
温馨提示
为了使项目比较清晰、规范,可以将单元测试的类单独放在一个source folder或者一个包中,比如这种结构:
【 转载请注明出处——胡玉洋《三分钟学会JUnit单元测试》】
- WordPress 开发之让浏览器自动加载最新的CSS、JS文件(免刷新缓存)
- [C#6] 0-概览
- 移植Windows自宿主WCF服务到Linux/Mono2.8
- IISWeb应用防火墙WAF
- WordPress 开发之让浏览器自动加载最新的CSS、JS文件(免刷新缓存)
- 在Windows 7无法通过UNC路径连接到共享文件夹的解决方法
- SQL Sever索引
- 使用SQL Server Management Studio 2008 将数据库里的数据导成脚本
- jquery mobile 移动web(5)
- [C#6] 1-using static
- WordPress 中的 Debug 模式(调试模式)
- Windows Server 2008 R2 Server Core 的 Microsoft .NET Framework 4安装程序
- [C#6] 4-string 插值
- 使用API Key验证WCF Data Service
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 剑指Offer LeetCode 面试题22. 链表中倒数第k个节点
- 剑指Offer LeetCode 面试题18. 删除链表的节点
- 剑指Offer LeetCode 面试题06. 从尾到头打印链表
- 最详细的docker中安装并配置redis
- 剑指Offer LeetCode 面试题59 - I. 滑动窗口的最大
- 剑指Offer LeetCode 面试题58 - II. 左旋转字符串
- 剑指Offer LeetCode 面试题58 - I. 翻转单词顺序
- 剑指Offer LeetCode 面试题56 - II. 数组中数字出现的次数 II
- 站在软件工程的角度重新思考面向对象(含高清图谱)
- 剑指Offer LeetCode 面试题57. 和为s的两个数字
- 白嫖Layui树型可折叠,可自定义,可搜索表格的实例
- 剑指Offer LeetCode 面试题53 - II. 0~n-1中缺失的数字
- 聊聊dubbo-go的DubboPackage
- 剑指Offer LeetCode 面试题53 - I. 在排序数组中查找数字 I
- Java虚拟机运行时数据区精华总结